PITTSBURGH -- Freddy Sanchez jokes that Pirates teammate Zach Duke has a pretty swing for a pitcher, but rarely does much with it. On a night Duke didn't pitch nearly as well as usual, that bat certainly came in handy.
Jose Castillo homered and drove in four runs and Duke was more effective at the plate than on the mound with three RBI, leading the Pirates past the St. Louis Cardinals, 9-7 Wednesday night.
"It's very nice to know I did contribute somewhere," Duke said. "Any thing you can do to help the team, that's the most important thing. I'm pretty proud I was able to do something."
The last-place Pirates got a rare victory against NL Central leader St. Louis, which lost for the 10th time in 17 games. The Pirates were 1-6 against the Cardinals this season and 5-18 the last two seasons, and had dropped 33 of 44 to them at home since PNC Park opened in 2001.
Duke (5-6) has seen the Pirates lose seven of his 14 starts by one run, only to get the decision after making one of his worst starts this season. The left-hander gave up 10 hits and five runs in five innings, but left with a 6-5 lead after twice delivering run-scoring singles against opposing starter Sidney Ponson (4-2).
"When you give up five runs, you don't expect to win," Duke said.
Castillo had an RBI double in the second -- one of three Pirates three-run innings. He then made it 9-5 with a three-run homer off reliever Brad Thompson in the sixth, a drive to left that followed Craig Wilson's double and Sanchez's walk.
Castillo is developing into one of the NL's better offensive second basemen in his third season as a regular, with 10 homers, 38 RBI and a .297 average with 96 games remaining. The homer was Castillo's second in 12 games since he homered in five consecutive games from May 26-31.
Duke hasn't had many worse outings in his 28 starts since joining the Pirates' rotation a year ago, but hasn't had a better night at the plate. He made it 3-1 with a two-run single to right in the second inning then, after giving up four runs in the Cardinals' third to fall behind 5-3, came back with another RBI single in the three-run fourth that put Pittsburgh back into the lead.
"I used to be a good hitter, once upon a time," said Duke, who hit .450 with 13 homers as a junior at Midway (Texas) High. "But that was with an aluminum bat."
The Pirates' bullpen was more effective than Duke, whose 4.52 ERA through 14 starts is more than twice that of 1.81 ERA of last season, when he went 8-2 as a rookie. Salomon Torres, Damaso Marte, and Roberto Hernandez combined for three scoreless innings. Matt Capps gave up a two-run homer to Scott Rolen in the ninth before Mike Gonzalez got the final out for his 12th save in 12 chances.
Ponson struggled throughout his 3 1/3 innings -- partly because he couldn't retire the opposing pitcher with runners in scoring position -- and lost his second in a row after going 4-0 in his first eight Cardinals starts. The Cardinals also had four runners thrown out, two trying to steal and another two on popups that were turned into double plays.
"I really pitched bad today, that's it," Ponson said. "That doesn't mean the pitcher beat me, everybody beat me. I'm not going to make any excuses."
Ponson gave up seven hits and six runs, leaving after Duke's second RBI single. Duke has a .241 average with five RBI.
"Sid had a lot of problems finishing hitters off -- he worked the count to his favor, made pitches to get ahead and then couldn't finish them off," Cardinals manager Tony La Russa said.
Jack Wilson added a run-scoring single in the fourth to end an 0-for-15 slide and Sanchez also had an RBI single while getting on base three times and scoring three times for Pittsburgh. Sanchez, not on the NL All-Star ballot because Joe Randa was expected to be the starting third baseman, has a .346 average that is second in the NL to Rolen's .358 for St. Louis.
Rolen doubled and singled his first two times up, giving him six consecutive hits to start the series. He then got out twice before hitting his eighth homer, in the ninth.
St. Louis' division lead was cut to two games as the Reds beat Milwaukee 3-0. ... The Pirates have won only one of their last 15 series against St. Louis, going 1-11-3. ... Juan Encarnacion had three hits and drove in two St. Louis runs. ... The Pirates' 110 runs since May 26 are the most in the NL.