2010-09-02 3 views
3

Продукты сгруппированы для проверки и пропуска/сбой примерно на 20 критериях. Им нужен отчет, в котором указано, сколько из каждого дефекта принадлежит отдельной группе.несколько столбцов GROUP BY в одну колонку

Дефект * является 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, да, я знаю.

ответ

5

Вы можете использовать представление для имитации таблицы 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 
+0

Спасибо, это именно то, что я искал. – 182764125216

0

Для SQL Server 2005/2008 используйте функцию UNPIVOT.
я не проверял, так считаю псевдокод:
SELECT, GroupID, DefectType, COUNT (*) AS вхождений
От
--building стола
--GroupID Дефект DefectType
--RF-061 Defect1 СРР
--RF-061 Defect1 FPV
--.............
(
ВЫБОР GroupID, Дефект, DefectType
ОТ
(SELECT GroupID, Defect1, Defect2, Defect3
FROM Product) р
UNPIVOT
(DefectType ДЛЯ Дефектов IN (Defect1, Defect2, Defect3)
) AS unpvt
) х

+0

OP находится на SQL Server 7! –

+0

Приношу свои извинения за ошибку, UNION - ваш друг в этой ситуации. – dragos55

Смежные вопросы