There's a pre-defined reports which does what you want 'Computers with specific software registered in Add Remove Programs'
(Note: this is collected by Hardware Inventory)
Edit the below query if you want to cover office, Visio & Project at the same time
SMS_R_System inner join SMS_G_System_ADD_REMOVE_PROGRAMS on
SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName like "%Visio%"
Or Check this link for multiple program http://www.acupofit.com/2013/07/sccm-sql-query-multiple-program.html?m=1
the query which was posted by ayman is WQL (collections) NOT SQL query(reports). do you want to find list of machines that has all 3 apps installed OR either of 3 apps installed ?
use the SQL quires available here on to create one http://eskonr.com/2012/05/sccm-linked-report-ms-office-version-with-service-pack-installed-machines/