[英]MSSQL join query with Group by
我的表結構是這樣的:
ID SID Type Description SN
82 372 PC XX 1234ZZ
83 372 Monitor YYY 2234ZZ
587 444 PC BBB 2255XX
588 444 Monitor CCC 4512XC
我想創建一個VIEW,以按SID(員工ID)顯示同一行組中的所有記錄
我的sql如下:
SELECT DISTINCT a.SID,
CAST(b.Description AS NVARCHAR(100)) AS Name_PC,
CAST(b.SN AS NVARCHAR(100)) AS SN_PC,
CAST(c.Description AS NVARCHAR(100)) AS Name_Monitor,
CAST(c.SN AS NVARCHAR(100)) AS SN_Monitor,
dbo.StaffDB.DisplayName
FROM dbo.IT_Equ AS a INNER JOIN
dbo.StaffDB ON a.SID = dbo.StaffDB.SID LEFT OUTER JOIN
dbo.IT_Equ AS b ON a.SID = b.SID AND b.Type = 'PC' LEFT OUTER JOIN
dbo.IT_Equ AS c ON a.SID = c.SID AND c.Type = 'Monitor'
WHERE (b.Description IS NOT NULL) AND (b.SN IS NOT NULL)
AND (c.Description IS NOT NULL) AND (c.SN IS NOT NULL)
GROUP BY a.SID, CAST(b.Description AS NVARCHAR(100)),
CAST(b.SN AS NVARCHAR(100)),
CAST(c.Description AS NVARCHAR(100)),
CAST(c.SN AS NVARCHAR(100)),
StaffDB.DisplayName
如果staf僅在PC和顯示器上有一條記錄,則該代碼可以正常工作,它將顯示以下結果:
SID Name_PC SN_PC Name_Monitor SN_Monitor DisplayName
372 XX 1234ZZ YYY 2234ZZ Peter
444 BBB 2255XX CCC 4512XC John
但是,如果員工擁有多個PC記錄或監控記錄,它將創建重復記錄,例如
db中的原始記錄:
ID SID Type Description SN
106 476 PC PC018 84TK5
107 476 Monitor LCD018 60P5D
421 476 PC PC220 85HYC
422 476 Monitor LCD220 51RMR
結果是這樣的:
SID Name_PC SN_PC Name_Monitor SN_Monitor DisplayName
476 PC018 84TK5 LCD018 60P5D Mary
476 PC018 84TK5 LCD220 51RMR Mary
476 PC220 85HYC LCD018 60P5D Mary
476 PC220 85HYC LCD220 51RMR Mary
有可能增強查詢成為這個嗎?
SID Name_PC SN_PC Name_Monitor SN_Monitor DisplayName
476 PC018 84TK5 LCD018 60P5D Mary
476 PC220 85HYC LCD220 51RMR Mary
謝謝
問題出在數據上-您必須修復重復項。 顯然1台顯示器屬於2台PC-
PC018 - 60P5D
和PC220 - 60P5D
。 或者,您可以嘗試安排它們,並以某種方式將第一台SN用於第一台PC,依此類推,但是我認為這不是正確的方法。
您如何確定要使用哪個sn_pc?
唯一性不會解決您的問題,唯一性只會消除相同的線條。
如果可能,您必須進行匯總:min(sn_pc)您可以在子查詢中使用視圖函數:row_number over(按sid分區,按name_pc順序按sn_pc分區),然后其中rownum = 1
但是,當再次讀取結果時,似乎在聯接表時缺少聯接條件
dbo.IT_Equ AS c ON a.SID = c.SID AND c.Type = 'Monitor'
這是問題所在,請盡可能使用子查詢選擇最后一行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.