[英]multiple GROUP BY columns into one column
產品按約20個標准分組進行檢查和通過/失敗。 他們想要一份報告,計算每個組中每個缺陷的數量。
缺陷*是varchar(3),用於標識哪些標准失敗。
該表有3列缺陷,我可以用以下內容返回:
SELECT GroupID,
Defect1, COUNT(Defect1) as Occ1,
Defect2, COUNT(Defect2) as Occ2,
Defect3, COUNT(Defect3) as Occ3
FROM Product
WHERE Run = 1728 AND Defect1 IS NOT NULL
GROUP BY GroupID, Defect1, Defect2, Defect3
ORDER BY GroupID
這給出了如下輸出:
GroupID Def1 Occ1 Def2 Occ2 Def3 Occ3
RF-061 CPP 1 FPV 1 null 0
RF-061 FPV 1 CPP 1 null 0
RF-061 HCR 1 CHP 1 null 0
RF-061 CHP 1 FPV 1 null 0
RF-061 FBL 1 HCR 1 FPT 1
RF-061 CHP 1 CPP 1 HCR 1
RF-061 CHP 1 CPP 1 null 0
RF-061 CPP 1 FBL 1 null 0
...
期望的輸出:
GrPupID Def Occurrences
BF-061 FPV 4
BF-061 CPP 5
BF-061 CHP 5
BF-061 HCR 5
BF-061 FBL 3
BF-061 PPC 1
BF-061 FPT 1
在SQL Server 7上,是的,我知道。
您可以使用視圖來模擬1NF表,然后它會很簡單。
CREATE VIEW tempView
AS
SELECT GroupID, Defect1 AS Defect, Run
FROM Product
UNION ALL
SELECT GroupID, Defect2 AS Defect, Run
FROM Product
UNION ALL
SELECT GroupID, Defect3 AS Defect, Run
FROM Product
GO
SELECT GroupID, Defect, COUNT(*) AS Occurrences
FROM tempView
WHERE Run = 1728
GROUP BY GroupID, Defect
ORDER BY GroupID
對於SQL Server 2005/2008,請使用UNPIVOT函數。
我沒有測試過,所以考慮偽代碼:
SELECT GroupID,DefectType,COUNT(*)AS出現次數
從
- 建造桌子
--GroupID缺陷缺陷類型
--RF-061 Defect1 CPP
--RF-061 Defect1 FPV
--.............
(
SELECT GroupID,Defect,DefectType
從
(SELECT GroupID,Defect1,Defect2,Defect3
來自產品)p
UNPIVOT
(DefectType FOR缺陷IN(缺陷1,缺陷2,缺陷3)
)AS unpvt
) X
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.