2014-04-18 76 views
0

我有下面的查詢工作,事情是我需要只列出每個唯一的「VolumeSerialNumber0」一次。在SO上這個問題並不缺少問題和方法,但他們建議使用子查詢和group by子句,但是當我嘗試這樣做時,我得到一個錯誤「列名在選擇列表中是無效的,因爲它不包含在聚集中函數或GROUP BY子句。查詢返回單DISTINCT行

我覺得它有接近我只是沒有得到神奇的語法完全正確的。

SELECT   
    dbo.v_R_System.Netbios_Name0, 
    dbo.v_GS_LOGICAL_DISK.TimeStamp, 
    dbo.v_GS_LOGICAL_DISK.Description0, 
    dbo.v_GS_LOGICAL_DISK.DeviceID0, 
    dbo.v_GS_LOGICAL_DISK.DriveType0, 
    dbo.v_GS_LOGICAL_DISK.Name0, 
    dbo.v_GS_LOGICAL_DISK.SystemName0, 
    dbo.v_GS_LOGICAL_DISK.VolumeName0, 
    dbo.v_GS_LOGICAL_DISK.VolumeSerialNumber0, 
    dbo.v_GS_PARTITION.Size0, 
    dbo.v_GS_LOGICAL_DISK.FileSystem0 
FROM    
    dbo.v_R_System 

    INNER JOIN dbo.v_GS_LOGICAL_DISK 
    ON dbo.v_R_System.ResourceID = dbo.v_GS_LOGICAL_DISK.ResourceID 

    INNER JOIN dbo.v_GS_PARTITION 
    ON dbo.v_GS_LOGICAL_DISK.ResourceID = dbo.v_GS_PARTITION.ResourceID 
+0

你可以張貼一些示例數據和預期結果說明你正在努力實現的目標。 –

回答

4
SELECT   
    MAX(S.Netbios_Name0), 
    MAX(L.TimeStamp), 
    MAX(L.Description0), 
    MAX(L.DeviceID0), 
    MAX(L.DriveType0), 
    MAX(L.Name0), 
    MAX(L.SystemName0), 
    MAX(L.VolumeName0), 
    L.VolumeSerialNumber0, 
    MAX(P.Size0), 
    MAX(L.FileSystem0) 
FROM    
    dbo.v_R_System S 

    INNER JOIN dbo.v_GS_LOGICAL_DISK L 
    ON S.ResourceID = L.ResourceID 

    INNER JOIN dbo.v_GS_PARTITION P 
    ON L.ResourceID = P.ResourceID 
GROUP BY 
    L.VolumeSerialNumber0 
+0

做到了,謝謝! – Brink