182*_*216 3 sql sql-server group-by count
产品按约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
Run Code Online (Sandbox Code Playgroud)
这给出了如下输出:
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
...
Run Code Online (Sandbox Code Playgroud)
期望的输出:
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
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)