Multiple GROUP BY columns in one column

Products are grouped to check and pass / fail on approximately 20 criteria. They need a report that indicates how many of each defect belong to a separate group.

Defect * is varchar (3) and is used to determine which criteria failed.
There are 3 columns for defects in the table, and I can return them with something like:

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

Which gives a conclusion, for example:

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
...

Required Conclusion:

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

on SQL Server 7, yes, I know.

+3
source share
2 answers

You can use the view to simulate a 1NF table, then that would be simple.

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
+5
source

SQL Server 2005/2008 UNPIVOT.
, :
SELECT GroupID, DefectType, COUNT (*) AS Occurrences

-
--GroupID Defect DefectType
--RF-061 Defect1 CPP
--RF-061 Defect1 FPV
--.............
(
SELECT GroupID, Defect, DefectType

(SELECT GroupID, Defect1, Defect2, Defect3
  ) p
UNPIVOT
 (DefectType FOR Defect IN (Defect1, Defect2, Defect3)
 ) AS unvt
) x

0

Source: https://habr.com/ru/post/1762903/


All Articles