
The Royals had rallied to tie the game on a sacrifice fly by Eric Hosmer in the seventh, and then loaded the bases on an error and a pair of walks by reliever Ryan Cook.
Dyson, hardly known for his power, showed bunt on his first pitch from Cook (1-2) before hitting a grounder deep behind second base.
Shortstop Adam Rosales fielded it cleanly but didn’t even bother with a throw as pinch runner Alcides Escobar scored the go-ahead run.
Aaron Crow (6-3) worked the eighth and Greg Holland handled the ninth for his 20th save, wrapping up Kansas City’s first win in five tries against Oakland this season.