2010-12-03 6 views
0

SQL Serverでこれと少し苦労していますか?このデータを与えられた(IDはINTで、残りはビットです):t-sqlでパーセンテージ列のピボット/アグリゲーションが可能ですか?

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

感謝を!

ジム

答えて

2
;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 
+0

クール、ありがとう!論理を明確にするために私は何ができますか?パーセンテージ列(それはややこしいビットのようです)? Percentageは与えられたType/Attributeの数をそのTypeの総数で割ったものです。上記のサンプルデータには、Type1レコードが4つとType2レコードが3つあります。私は多分、WITHのクエリは、パーセンテージを計算する際に使用することができます合計を取得すると思いますか?わからない。 –

+0

@ジム - それは今私の答えに組み込まれるべきです。 –

+0

うわー、マーティン、大変ありがとう! –

関連する問題