Pivot / агрегирование с процентными столбцами возможно в t-sql? - PullRequest
0 голосов
/ 03 декабря 2010

Бороться с этим немного в SQL Server, есть идеи? Учитывая эти данные (ID - INT, остальные - BIT):

------------------------------------------
ID   Type1   Type2   AttrA   AttrB   AttrC
------------------------------------------
1    1       0       1       0       0
2    1       0       1       0       0
3    1       1       0       1       1
4    0       1       1       1       0
5    1       1       1       1       0

Я хотел бы подготовить этот отчет:

---------------------------------------------------------
Attr    NumOfType1   PctOfType1   NumOfType2   PctOfType2
---------------------------------------------------------
AttrA   3            75%          2            67%
AttrB   2            50%          3            100%
AttrC   1            25%          1            33%
Total   4            N/A          3            N/A

Спасибо!

Jim

1 Ответ

2 голосов
/ 03 декабря 2010
;WITH YourBaseTable AS
(
SELECT 1 ID, 1 Type1,0 Type2, 1 AttrA, 0 AttrB, 0 AttrC UNION ALL
SELECT 2 ID, 1 Type1,0 Type2, 1 AttrA, 0 AttrB, 0 AttrC  UNION ALL
SELECT 3,1,1,0,1,1 UNION ALL
SELECT 4,0,1,1,1,0 UNION ALL
SELECT 5,1,1,1,1,0 
), T AS
(
SELECT *, 1 AS Total
FROM YourBaseTable
)
SELECT 
Attr,
 COUNT(CASE WHEN VALUE = 1 AND Type1 = 1 THEN 1 END) NumOfType1, 
 CASE WHEN Attr <> 'Total' THEN 100 * CAST(COUNT(CASE WHEN VALUE = 1 AND Type1 = 1 THEN 1 END) AS FLOAT)/COUNT(CASE WHEN Type1 = 1 THEN 1 END) END PctOfType1, 
 COUNT(CASE WHEN VALUE = 1 AND Type2 = 1 THEN 1 END) NumOfType2,
 CASE WHEN Attr <> 'Total' THEN 100 * CAST(COUNT(CASE WHEN VALUE = 1 AND Type2 = 1 THEN 1 END) AS FLOAT)/COUNT(CASE WHEN Type2 = 1 THEN 1 END) END PctOfType2
FROM T
UNPIVOT
(VALUE FOR Attr IN (AttrA, AttrB,AttrC, Total)) AS unpvt
GROUP BY Attr
...