簡體   English   中英

多個GROUP BY列成一列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM