Joey MacDonald his first career win in goal as the Wings outshot the Flames 50-20.
Detroit also got a goal and an assist each from Tomas Holmstrom, Mathieu Schneider, and Jason Williams, and Pavel Datsyuk, and Johan Franzen also added a goal each. Nicklas Lidstrom and Dan Cleary each had two assists.
Roman Hamrlik had a goal and an assist for Calgary, and Alex Tanguay, Jeff Friesen, and Mark Giordano also scored. Miikka Kiprusoff stopped 11 of 14 shots before being replaced by Jamie McLennan.
Detroit chased Kiprusoff with three first-period goals.
Zetterberg opened the scoring with a wrist shot from the high slot after Kiprusoff misplayed the puck behind the net. Datsyuk put in the rebound of Holmstrom's shot for his 17th goal, and Schneider beat Kiprusoff with a slap shot from the point 1:10 later.
Kiprusoff was then pulled.
The Wings outshot the Flames 17-5 in the period.
The barrage continued in the second period. Zetterberg got his second goal of the night and 26th of the season, on the power play, before Calgary got going.
Tanguay capitalized on a turnover in front of the Detroit net by Franzen and beat MacDonald just 42 seconds later for his 16th goal.
But Williams and Holmstrom both scored in the middle period.
Friesen connected with 6:20 left in the third period, Hamrlik with 3:47 remaining, and Giordano with 2:40 left.
Franzen's goal came with 1:23 remaining for Detroit.
GAME NOTES: D Brad Stuart and C Wayne Primeau were in the lineup for Calgary after being acquired from the Boston Bruins for Andrew Ference and Chuck Kobasew. ... Detroit G Dominik Hasek missed the game because of tendinitis in his wrist. ... Wings D Danny Markov missed his second game due to an upper body injury.