2016-08-09 30 views
-3
select distinct v1.name 'Machine Name', v1.[user] 'Primary User', CASE 

    When v1.Guid in (select distinct v1.guid from vComputer v1 
inner join Inv_AddRemoveProgram t1 on v1.Guid = t1._ResourceGuid 
inner join Inv_OfficeSuiteVersions3 t2 on v1.guid = t2._ResourceGuid 
where t1.DisplayName = 'Microsoft Office Professional Plus 2007' and t1.InstallFlag = '1' 
and t2.Outlook2007Ver <> 'Not Present') 
    Then 'Microsoft Office Professional Plus 2007' 
    When v1.Guid in (select distinct v1.guid from vComputer v1 
inner join Inv_AddRemoveProgram t1 on v1.Guid = t1._ResourceGuid 
inner join Inv_OfficeSuiteVersions3 t2 on v1.guid = t2._ResourceGuid 
where t1.DisplayName = 'Microsoft Office Professional Plus 2010' and t1.InstallFlag = '1' 
and t2.Outlook2010Ver <> 'Not Present') 
    Then 'Microsoft Office Professional Plus 2010' 
    When v1.Guid in (select distinct v1.guid from vComputer v1 
inner join Inv_AddRemoveProgram t1 on v1.Guid = t1._ResourceGuid 
inner join Inv_OfficeSuiteVersions4 t2 on v1.guid = t2._ResourceGuid 
where t1.DisplayName = 'Microsoft Office Professional Plus 2013' and t1.InstallFlag = '1' 
and t2.Outlook2013Ver <> 'Not Present') 
    Then 'Microsoft Office Professional Plus 2013' 
    When v1.Guid in (select distinct v1.guid from vComputer v1 
inner join Inv_AddRemoveProgram t1 on v1.Guid = t1._ResourceGuid 
inner join Inv_OfficeSuiteVersions5 t2 on v1.guid = t2._ResourceGuid 
where t1.DisplayName like 'Microsoft Office 365 ProPlus%' and t1.InstallFlag = '1' 
and Outlook2016Ver <> 'Not Present') 
    Then 'Microsoft Office 365 ProPlus' 
    End [Office Version], v2.[Location by Subnet] 'Location' 

from vComputer v1 

inner join vcomputerlocations v2 on v1.Guid = v2.Guid 

and v1.Name like 'USSD%' 

and v1.Guid not in (select Guid from CollectionMembership where FilterName = 'Software Delivery Exclusions') 

or v1.Name like 'USSF%' 

and v1.Guid not in (select Guid from CollectionMembership where FilterName = 'Software Delivery Exclusions') 

or v1.Name like 'USSEA%' 

and v1.Guid not in (select Guid from CollectionMembership where FilterName = 'Software Delivery Exclusions') 

or v1.Name like 'USBES%' 

and v1.Guid not in (select Guid from CollectionMembership where FilterName = 'Software Delivery Exclusions') 

or v1.Name like 'USCAM%' 

and v1.Guid not in (select Guid from CollectionMembership where FilterName = 'Software Delivery Exclusions') 

order by 3,4,1 
+0

您需要發佈查詢的執行計劃。否則,幾乎不可能獲得適當的幫助。 –

+0

您是否設置了正確的索引並嘗試使用EXPLAIN? –

+0

你可能也想發佈這個問題http://codereview.stackexchange.com/questions/tagged/sql-server – scsimon

回答

0

考慮使用Common Table Expressions, Temp Tables or Table Variables進行重複操作,並假設各種Guid是主鍵,請嘗試使用它們的值而不是顯示或過濾器名稱列進行選擇。

像這樣的東西可能:

WITH a AS 
(
    SELECT v1.Guid, v1.Name, v1.[user], t1.DisplayName from vComputer v1 
    INNER JOIN Inv_AddRemoveProgram t1 on v1.Guid = t1._ResourceGuid 
    INNER JOIN Inv_OfficeSuiteVersions3 t2 on v1.Guid = t2._ResourceGuid 
    WHERE t1.InstallFlag = '1' 
    AND 
    (t1.PrimaryKey = '2007 PrimaryKey Value' AND t2.Outlook2007Ver <> 'Not Present') 
    OR 
    ((t1.PrimaryKey = '2010 PrimaryKey Value' AND t2.Outlook2010Ver <> 'Not Present') --etc etc 
), 

b AS 
(
    SELECT Guid FROM CollectionMembership WHERE FilterName = 'Software Delivery Exclusions' 
) -- would be better to search by primary key 

SELECT a.*, v2.[Location by Subnet] 
FROM a INNER JOIN vcomputerlocations v2 on a.Guid = v2.Guid 
LEFT JOIN b ON a.Guid = b.Guid 
WHERE b.Guid IS NULL 

也許不是完美的,但我希望你的想法

+0

感謝您的想法,使用這種方法做了伎倆。非常感謝你! – user3009669

+0

@ user3009669如果這個答案有幫助,請把它標記爲已接受? –

0
  1. 從查詢的結束

    刪除訂單的,如果你在 您的應用程序需要排序。

  2. 如果可以,則應該重寫此查詢,因爲它無法在您的連接上使用 索引 - >當您使用像「USSF%」這樣的過濾器時,SQL引擎無法使用索引。

  3. 如果您沒有任何,請在FilterName上創建索引。