2012-01-31 28 views
1

說我有一個表A和具有5列(列1,列2 .. Column5),這些值中的每一列是一個字符尺寸和只存儲 如字母如下T-SQL列值計數

 

    ID Column1 Column2 Column3 Column4 Column5 
    1 A  C  D  A  B 
    2 A  D  A  B  A 
    3 B  K  Q  C  Q 
    4 A  K  E  E  B 
    5 F  K  F  F  S 


我需要存儲在列1至column5每個不同值的數量,我想以下信息

 

    Column1 has A's count=3, B's count=1, F's count=1 
    Column2 has C's count=1, D's count=1, K's count=3 

    and so on 


什麼是正確的方式和格式返回這些值?

感謝

回答

4

你可以嘗試:

SELECT 'Col1' As 'Col', Column1 as 'Value', COUNT(*) as 'Ct' 
FROM MyTable 
GROUP BY Column1 
UNION ALL 
SELECT 'Col2', Column2, COUNT(*) 
FROM MyTable 
GROUP BY Column2 
... 

你需要編寫額外的SELECTUNION爲要彙總各列,但它會回報你是後的數據。

1

你能不能執行個人查詢使用GROUP BY需要每列?

SELECT Column1, COUNT(Column1) FROM TableName 
GROUP BY Column1 
1

工會的做法是將服務器,你最好的。每個聯盟單獨的查詢會是這個樣子:

Select Distinct Column1, COUNT(Column1)OVER(PARTITION BY Column1) Col1Count, 'Column1' ColumnName 
From ColTable 
Union All 
... 
+0

這不會告訴他哪些值屬於哪個這使得它比有用少列。 – JNK 2012-02-01 14:56:54

1

您可以在外部查詢中派生的表(或CTE)和group by列名稱和值使用unpivot

試試這個:

declare @T table 
(
    ID int, 
    Column1 char(1), 
    Column2 char(1), 
    Column3 char(1), 
    Column4 char(1), 
    Column5 char(1) 
) 

insert into @T values 
(1, 'A',  'C',  'D',  'A',  'B'), 
(2, 'A',  'D',  'A',  'B',  'A'), 
(3, 'B',  'K',  'Q',  'C',  'Q'), 
(4, 'A',  'K',  'E',  'E',  'B'), 
(5, 'F',  'K',  'F',  'F',  'S') 

;with C as 
(
    select ID, Col, Val 
    from (
     select ID, Column1, Column2, Column3, Column4, Column5 
     from @T 
     ) as T 
    unpivot (Val for Col in (Column1, Column2, Column3, Column4, Column5)) as U 
) 
select Col, Val, count(*) as ValCount 
from C 
group by Col, Val 
order by Col