2014-04-18 75 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