Select Distinct Top 1000000 Coalesce(tsysOS.Image, tsysAssetTypes.AssetTypeIcon10) As icon, tblAssets.AssetID, tblAssets.AssetName, tblAssets.Domain, tblState.Statename As State, Case When tblComputersystem.Domainrole > 1 Then 'Server' Else 'Workstation' End As [Workstation/Server], tblAssets.Username, tblAssets.Userdomain, tblAssets.IPAddress, tsysIPLocations.IPLocation, tblAssetCustom.Manufacturer, tblAssetCustom.Model, tsysOS.OSname As OS, tblAssets.SP, PatchIDMax as [Highest KB Patch found], SubQuery2.Buildnumber, Case When tsysOS.OScode Like '10.0.10240%' Then '1507' When tsysOS.OScode Like '10.0.10586%' Then '1511' When tsysOS.OScode Like '10.0.14393%' Then '1607' When tsysOS.OScode Like '10.0.15063%' Then '1703' When tsysOS.OScode Like '10.0.16299%' Then '1709' When tsysOS.OScode Like '10.0.17134%' Then '1803' When tsysOS.OScode Like '10.0.17763%' Then '1809' When tsysOS.OScode Like '10.0.18362%' Then '1903' When tsysOS.OScode Like '10.0.18363%' Then '1909' When tsysOS.OScode Like '10.0.19041%' Then '2004' When tsysOS.OScode Like '10.0.19042%' Then '20H2' End As Version, Case When tsysOS.OSname = 'Win 2008' And SubQuery2.Buildnumber >= 21097 Then 'Up to date' When (tsysOS.OSname = 'Win 7' Or tsysOS.OSname = 'Win 7 RC' Or tsysOS.OSname = 'Win 2008 R2') And SubQuery2.Buildnumber >= 24576 Then 'Up to date' When (tsysOS.OSname = 'Win 2012' Or tsysOS.OSname = 'Win 8') And SubQuery2.Buildnumber >= 23329 Then 'Up to date' When (tsysOS.OSname = 'Win 8.1' Or tsysOS.OSname = 'Win 2012 R2') And SubQuery2.Buildnumber >= 19995 Then 'Up to date' When tsysOS.OScode Like '10.0.10240' And SubQuery2.Buildnumber >= 18906 Then 'Up to date' When tsysOS.OScode Like '10.0.10586' Then 'EOL, update to a higher Windows version' When (tsysOS.OScode Like '10.0.14393' Or tsysOS.OSname = 'Win 2016') And SubQuery2.Buildnumber >= 4350 Then 'Up to date' When tsysOS.OScode Like '10.0.15063' Then 'EOL, update to a higher Windows version' When tsysOS.OScode Like '10.0.16299' Then 'EOL, update to a higher Windows version' When tsysOS.OScode Like '10.0.17134' And SubQuery2.Buildnumber >= 2145 Then 'Up to date' When (tsysOS.OScode Like '10.0.17763' Or tsysOS.OSname = 'Win 2019') And SubQuery2.Buildnumber >= 1879 Then 'Up to date' When tsysOS.OScode Like '10.0.18362%' Then 'EOL, update to a higher Windows version' When tsysOS.OScode Like '10.0.18363%' And SubQuery2.Buildnumber >= 1500 Then 'Up to date' When tsysOS.OScode Like '10.0.19041%' And SubQuery2.Buildnumber >= 928 Then 'Up to date' When tsysOS.OScode Like '10.0.19042%' And SubQuery2.Buildnumber >= 928 Then 'Up to date' Else 'Out of date' End As [Patch status], tblAssets.Lastseen, tblAssets.Lasttried, QuickFixLastScanned.QuickFixLastScanned, Case When tblErrors.ErrorText Is Not Null Or tblErrors.ErrorText != '' Then 'Scanning Error: ' + tsysasseterrortypes.ErrorMsg Else '' End As ScanningErrors, Convert(nvarchar,DateDiff(day, QuickFixLastScanned.QuickFixLastScanned, GetDate())) + ' days ago' As WindowsUpdateInfoLastScanned, Case When Convert(nvarchar,DateDiff(day, QuickFixLastScanned.QuickFixLastScanned, GetDate())) > 3 Then 'Windows update information may not be up to date. We recommend rescanning this machine.' Else '' End As Comment From tblAssets left Join (select tblassets.AssetID, convert(bigint,tblassets.BuildNumber) as Buildnumber from tblAssets) As SubQuery2 On tblAssets.AssetID = SubQuery2.AssetID Inner Join tblAssetCustom On tblAssets.AssetID = tblAssetCustom.AssetID Inner Join tsysAssetTypes On tsysAssetTypes.AssetType = tblAssets.Assettype Inner Join tblOperatingsystem On tblOperatingsystem.AssetID = tblAssets.AssetID Left Join (Select Top 1000000 tblQuickFixEngineering.AssetID, Max(Cast(Right(tblQuickFixEngineeringUni.HotFixID, 7) As bigint)) As PatchIDMax From tblQuickFixEngineering Inner Join tblQuickFixEngineeringUni On tblQuickFixEngineeringUni.QFEID = tblQuickFixEngineering.QFEID Where Right(tblQuickFixEngineeringUni.HotFixID, 7) Not Like '%[^0-9]%' Group By tblQuickFixEngineering.AssetID) As SubQuery1 On tblAssets.AssetID = SubQuery1.AssetID Inner Join tblState On tblState.State = tblAssetCustom.State Inner Join tblComputersystem On tblAssets.AssetID = tblComputersystem.AssetID Left Join tsysOS On tsysOS.OScode = tblAssets.OScode Left Join tsysIPLocations On tblAssets.IPNumeric >= tsysIPLocations.StartIP And tblAssets.IPNumeric <= tsysIPLocations.EndIP Left Join (Select Distinct Top 1000000 TsysLastscan.AssetID As ID, TsysLastscan.Lasttime As QuickFixLastScanned From TsysWaittime Inner Join TsysLastscan On TsysWaittime.CFGCode = TsysLastscan.CFGcode Where TsysWaittime.CFGname = 'QUICKFIX') As QuickFixLastScanned On tblAssets.AssetID = QuickFixLastScanned.ID Left Join (Select Distinct Top 1000000 tblErrors.AssetID As ID, Max(tblErrors.Teller) As ErrorID From tblErrors Group By tblErrors.AssetID) As ScanningError On tblAssets.AssetID = ScanningError.ID Left Join tblErrors On ScanningError.ErrorID = tblErrors.Teller Left Join tsysasseterrortypes On tsysasseterrortypes.Errortype = tblErrors.ErrorType Where tsysOS.OSname <> 'Win 2000 S' And tsysOS.OSname Not Like '%XP%' And tsysOS.OSname Not Like '%2003%' And (Not tsysOS.OSname Like 'Win 7%' Or Not tblAssets.SP = 0) And tblAssetCustom.State = 1 And tsysAssetTypes.AssetTypename Like 'Windows%' Order By tblAssets.Domain, tblAssets.AssetName