Arizona forced extra innings with a Cody Ross sacrifice fly that allowed Paul Goldschmidt to score but the Diamondbacks left runners in scoring position in the ninth, 10th and 11th innings.
Arizona, losing for the fifth time in seven games, was just 1-for-15 batting with men in scoring position and stranded 16 runners in the game.
That Schierholtz allowed a chance in the 12th. After reliever David Hernandez (4-6) retired the first two batters he faced, Anthony Rizzo worked him for a walk and Schierholtz sliced the next pitch into the left-field corner. Rizzo scored easily ahead of the relay home.
Hector Rondon (2-0) pitched two innings of one-hit relief to get the win.
Rizzo and Schierholtz had consecutive run-scoring hits in the fourth inning to open the game's scoring. Schierholtz put the Cubs up 6-0 with a three-run home run in the fifth that came after an RBI double from Junior Lake and a walk to Rizzo.
Arizona started its comeback with two runs off an error in the fifth and added a three-run home run by Goldschmidt in the sixth to get within 6-5.