ST. LOUIS -- Tyler Thornburg can't explain it. Neither can Brewers manager Ron Roenicke.
How does a pitcher who was 0-9 with a 5.79 ERA at Triple-A transform into one delivering quality start after quality start in the Major Leagues?
"If we ended the season after 15 starts," Thornburg said, referring to his first-half total for the Nashville Sounds, "I would have probably been killing myself all offseason."
Instead, he is giving the Brewers brass something to think about all offseason. Thornburg limited the potent Cardinals to two runs and three hits in six innings, and first baseman Sean Halton homered and drove in three runs in a rare start as the Brewers topped the Cardinals, 5-3, at Busch Stadium on Thursday.
The Brewers beat the Cardinals for only the fourth time in 16 matchups this season and dropped St. Louis into a tie with Pittsburgh atop the National League Central.
With a smile, Thornburg said he played the spoiler role with a teammate in mind. Kyle Lohse was originally in line to pitch Thursday night against his former team, but he was bumped back a day as the Brewers moved to a six-man rotation for 20 games in 20 days to end the season.
"I know Kyle Lohse wanted to throw so he could do that," Thornburg said. "He wanted to be the guy that makes [the Cardinals] go to that Wild Card game or whatever. I know he wanted that, so I was trying to do the best I could to help him out there."
Both of the Cardinals' runs against 24-year-old Thornburg, and two of the three hits, came in the fourth inning, when Matt Holliday followed Jon Jay's leadoff single with a run-scoring double, and eventually scored himself on a sacrifice fly.
But the Brewers had built a four-run advantage against Cardinals starter Joe Kelly entering that frame. Aramis Ramirez's RBI groundout in the first inning gave the Brewers an early lead, and Halton padded it with an RBI single in the second and a two-run homer in the fourth. He started in place of slumping slugger Juan Francisco, who entered the night with seven hits and 27 strikeouts in his last 50 at-bats.
"It was nice to be a factor tonight," Halton said. "A guy like me, being called up for September, that's all you can really ask for is to be a factor."
He was particularly pleased to support Thornburg, a Nashville Sounds teammate at the beginning of the year.
"He couldn't get a win in Nashville, and it's so good to see him have some success at this level," Halton said. "I think that's a good amount of starts in a row that have gone pretty well for him. He had the worst luck I've ever seen in Nashville, but he stayed poised throughout the season and it's good to see him get some results that he's really earned."
Somehow, the same Thornburg who posted those ugly numbers at Nashville is 2-1 with a 2.18 ERA in 16 games for the Brewers, including 1-0 with a 1.50 ERA in his five starts -- all quality starts.
"It's huge," Thornburg said. "I'm going to try to have the best possible couple of starts I have left and give myself an opportunity going into next year."
How does he explain his turnaround?
"I really, honestly, don't know," Thornburg said. "Once I got up here, some of the veteran guys like Kyle Lohse and 'Gonzo' [Michael Gonzalez] really, really helped me out, as far as the way to go about things mentally and physically as far as routines go. I think that helped."
Could Roenicke offer an explanation?
"No, I don't know," the manager said. "He's confident right now. He gets himself in some trouble sometimes, but he's got such good stuff, three plus pitches, and when they're located well, he's going to get people out. … He's pitching well. He goes his six innings, and he really hasn't given up much."
Thornburg's future role -- starter, reliever, swingman -- remains to be determined. Brewers officials will meet during the season's final homestand to evaluate the roster, and Thornburg's future will be on the agenda.
After the Brewers' lead slipped to 4-2, Thornburg faced a lapse of command in the sixth inning, when he hit Jay with a pitch and walked Holliday on four pitches. Thornburg recovered by retiring Carlos Beltran on a fly out and David Freese on a groundout. Six of Thornburg's seven pitches to Freese in that key at-bat were curveballs, a pitch with which Thornburg had been struggling.
"Every time you face a guy you've never seen the first couple at-bats you're kind of like wondering and watching what he's trying to do," Beltran said. "We just couldn't do anything against him."
Kelly was charged with four runs, only three of which were earned due to the first of his two throwing errors in the second inning. He surrendered seven hits and was charged with his first loss in eight decisions since June 5 -- dating back 12 starts and 17 appearances.
Brewers relievers Rob Wooten, Brandon Kintzler and Jim Henderson finished the win, with Kintzler working a scoreless eighth inning a day after throwing 30 pitches in Wednesday's loss. Henderson earned his 25th save.
"I thought we played three good games," Roenicke said. "We didn't finish two of them well, but we played three pretty good games against them, and it's important to beat these guys. They have been taking it to us pretty good, and to get a win and see us play well -- we played a good game today, all the way through."