Goals: 0-1 Geiger (9'), 0-2 Wagner (pen. 56'), 0-3 Wagner (80')
Mark Uth flicked a header just beyond the far post before Hoffenheim took an early lead with Dennis Geiger meeting Nadiem Amiri's cross at the near post and, with his second touch, slotting the ball in from close range. Leonardo Bittencourt curled Cologne's first shot beyond the far post before Amiri, Kerem Demirbay and Sandro Wagner all threatened Timo Horn's goal and Geiger scuppered an excellent opportunity to add his and Hoffenheim's second. Yuya Osako gave Cologne some hope just before half-time when he struck the post, but it was still too little for Peter Stöger's men.
The Billy Goats showed in Europe in midweek that they have not forgotten how to score goals, but domestically, their woes continued when Uth was felled by Pawel Olkowski inside the penalty area and Sandro Wagner doubled Hoffenheim's lead from the spot. Hoffenheim goalkeeper Oliver Baumann was given some work to do by substitute Milos Jojic (twice) and Olkowski, but a psychologically deflated Cologne side took every miss as a further blow to an already destitute morale, and Wagner's second and Hoffenheim's third hit them while they were down as their wait for a first Bundesliga win of the season extended to 11 matches.
- Hoffenheim are the only side in the Bundesliga, together with Bayer Leverkusen, to have scored in every single game they have played this season.
- Hoffenheim ended a four-game winless run (two draws, two defeats) – they have never gone five games without a win under Julian Nagelsmann.
- Wagner has scored five of the eight penalties he has taken in the Bundesliga, although he missed his last – in April 2016.
- Wagner's brace was his fifth in the Bundesliga – his last also coming against Cologne, last December.
- Polanski made his 250th Bundesliga appearance – and his first touch was an assist for Wagner's second.
- Mark Uth, who was born in Cologne, has scored more goals (five) than the entire Cologne squad put together (four).
Cologne: Horn – Olkowski, Maroh, Heintz, Rausch – Zoller (Handwerker 67'), Lehmann (c) (Sörensen 79'), Özcan (Jojic 59'), Bittencourt – Osako, Guirassy
Unused substitutes: Kessler, Clemens, J. Horn, Klünter
Absentees: Cordoba (thigh), Hector (ankle), Höger (muscular), Pizarro (thigh)
Coach: Peter Stöger
Hoffenheim: Baumann - Akpoguma, Vogt (c), Posch - Grillitsch, Schulz - Geiger (Polanski 77') - Demirbay, Amiri (Kramaric 67') - Wagner (Nordtveit 82'), Uth
Unused substitutes: Kobel, Zuber, Rupp, Hack
Absentees: Bicakcic (knee), Gnabry (match fitness), Kaderabek (knee), Szalai (match fitness),, Zulj (match fitness)
Coach: Julian Nagelsmann
Watch: See how Hoffenheim fared in the free-kick challenge