由於虎牢地形險阻,竇軍不能前進,駐紮了1個多月,多次作戰不利。四月三十日,李世民又派部將王君廓率輕騎千餘截擊竇建德運糧隊,竇建德軍更陷於不利境地,士氣低落、軍心渙散、將士思歸。
「世民,竇建德有可能會乘我軍草料將盡,牧馬河北的時候襲擊虎牢。」李世民聽了這話,看著若希,若希朝他點了點頭「我只能言進與此了,剩下的全靠你自己了。」
李世民聽後決定將計就計,於五月初一率兵一部過河,從南面逼進廣武,觀察竇軍形勢,留馬千餘匹在河中沙洲放牧,以誘竇建德出擊,晚上再返回虎牢。
次日,竇建德果然中計,全部自板渚(今滎陽北黃河南岸)西出,在汜水東岸佈陣,北依大河,南連鵲山(今河南滎陽西南),正面寬達二十里,擂鼓挑戰。
李世民率軍在汜水西岸列陣相持,登高瞭望,然後對部下說「他們兵起山東,沒打過什麼敗仗,今天他們逼城而陣,看來對我軍有輕敵之心。如今竇軍已經中計,我們等他們飢餓疲勞時再攻打。」
於是決定按兵不動,另派一小隊兵與竇建德軍周旋,同時派人將留在河北的人馬召回,待竇建德軍氣衰,再一舉將其擊破。 看著登高指揮,臨危不亂的李世民,若希感歎不愧是以後當皇帝的人,這種計謀、氣勢旁人是無法比的。
時至中午,竇建德軍士卒饑疲思歸,全部坐了下來,又爭搶喝水,秩序紊亂。
此時,李世民突然發起進攻,命宇文士及帶三百騎兵經竇建德軍陣西而南,先行試陣,並告誡他說:「竇建德軍如嚴整不動,即應回軍,如陣勢有動,則可引兵東進。」宇文士及部經竇軍陣前時,竇軍陣勢果然動亂。李世民見時機成熟,遂下令出擊,親率輕騎衝鋒,主力繼進,東涉汜水,直撲竇軍大營。此時竇建德君臣正在議事,唐軍突臨。竇建德軍未及列陣抵抗,倉猝應戰,被迫東退。唐將竇抗率部緊迫,被竇建德軍頑強擊退。李世民見進攻不利,便率驍將史大奈、程咬金、秦叔寶、宇文歆等精銳突入其陣,從陣後展唐旗。
這時就見秦叔寶橫槍躍馬,從敵軍正面一直殺到敵軍背面,他手持唐軍軍旗,又從敵軍背面殺到敵軍正面,千軍萬馬之中,縱橫馳騁,勇不可擋,敵軍心生怯意,陣腳大亂,看到唐旗竇建德軍士卒以為大營被佔,迅速崩潰,唐軍追擊三十里,竇軍被斬首三千餘級,五萬人被俘。
亂軍中,竇建德中槊受傷,退至牛口渚,唐車騎將軍白士讓、楊武威追至,竇建德於慌亂中墜馬,被抓獲。唐軍主力回師洛陽,並且壓竇建德至洛陽城下與王世充對話,王世充眼見竇建德被抓,其主力已經潰敗,大勢已去,洛陽城不會再有援軍,走投無路之下,被迫於五月初九率太子、群臣等二千餘人獻城投降。
看著打了勝仗的李世民,若希心中感慨不已,自己只是透露一點訊息,他就能迅速利用安排作戰計劃,並置敵與死地,這才是歷史上真正的李世民。