Holliday hit a solo home run in the first inning and the Cardinals added a homer in each of the next four innings in building an 8-6 lead.
Lance Lynn (13-4), despite allowing six runs on eight hits in five innings picked up his 13th win and is tied for the National League lead in the category. Jason Motte pitched the ninth for St. Louis and earned his 23rd save.
Cubs starter Travis Wood (4-6) allowed all five St. Louis home runs. He was charged with eight runs -- all earned -- and seven hits in five innings.
Holliday's 18th home run of the season started the slugfest but Chicago scored three times before making an out in their half of the inning. Anthony Rizzo capped the rally with his sixth home run of the year.
The Cubs scored three times in the bottom of the third. Starlin Castro, who had three hits, started the rally with a triple.
Matt Carpenter broke the tie with a home run in the fourth and Allen Craig added a solo shot in the fifth for St. Louis. The Cardinals added a seventh-inning run when Holliday, who finished with three hits, two RBI and a run scored, singled in John Jay.