2016-10-03 2 views
0

데이터베이스에 60 개의 열이있는 테이블이 있다고 가정합니다. 누군가가 테이블의 각 열 (60)에있는 모든 고유 항목 수를 가져 오는 쿼리를 나에게 말할 수 있습니까? 위의 표에서 가정처럼Sql 테이블의 각 열에있는 고유 항목의 수를 가져 오는 쿼리

Cl1  Cl2 Cl3 
68722 No No No No No Yes Male No No 
68723 No Yes No No No Yes FeMale No No 
68725  No No No No Yes Male No No 

은 내가

대답 내가 원하는 (열 10 열 1) 10 열이 있습니다

Cl2 No =2 , Blank=1 

Cl3 No=2, Yes =1 

등 최대

10을하십시오 SQL Server에 대한 쿼리를 제공합니다.

답변

0

UNPIVOT + GROUP BY 및 COUNT :

SELECT [Columns], 
     Case when [Values] = '' THEN 'Blank' ELSE [Values] END [Values], 
     COUNT(Id) as HowMany 
FROM (
    SELECT Id, 
      CAST(Cl1 as nvarchar(max)) as Cl1, 
      CAST(Cl2 as nvarchar(max)) as Cl2, 
      CAST(Cl3 as nvarchar(max)) as Cl3, 
      CAST(Cl4 as nvarchar(max)) as Cl4, 
      CAST(Cl5 as nvarchar(max)) as Cl5, 
      CAST(Cl6 as nvarchar(max)) as Cl6, 
      CAST(Cl7 as nvarchar(max)) as Cl7, 
      CAST(Cl8 as nvarchar(max)) as Cl8, 
      CAST(Cl9 as nvarchar(max)) as Cl9 
    FROM YourTable 
) as t 
UNPIVOT (
    [Values] FOR [Columns] IN (Cl1, Cl2, Cl3, Cl4, Cl5, Cl6, Cl7, Cl8, Cl9) 
) as unpvt 
GROUP BY [Columns], [Values] 
ORDER BY [Columns] 

출력 :

당신은 CTE에 넣고 수 :

;WITH cte as (
    SELECT [Columns], 
      Case when [Values] = '' THEN 'Blank' ELSE [Values] END + '='+CAST(COUNT(Id) as nvarchar(max)) as HowMany 
    FROM (
     SELECT Id, 
       CAST(Cl1 as nvarchar(max)) as Cl1, 
       CAST(Cl2 as nvarchar(max)) as Cl2, 
       CAST(Cl3 as nvarchar(max)) as Cl3, 
       CAST(Cl4 as nvarchar(max)) as Cl4, 
       CAST(Cl5 as nvarchar(max)) as Cl5, 
       CAST(Cl6 as nvarchar(max)) as Cl6, 
       CAST(Cl7 as nvarchar(max)) as Cl7, 
       CAST(Cl8 as nvarchar(max)) as Cl8, 
       CAST(Cl9 as nvarchar(max)) as Cl9 
     FROM YourTable 
    ) as t 
    UNPIVOT (
     [Values] FOR [Columns] IN (Cl1, Cl2, Cl3, Cl4, Cl5, Cl6, Cl7, Cl8, Cl9) 
    ) as unpvt 
    GROUP BY [Columns], [Values] 
) 

SELECT DISTINCT 
      [Columns] +' '+  
      STUFF((
      SELECT ';'+HowMany 
      FROM cte 
      WHERE c.[Columns] = [Columns] 
      FOR XML PATH('') 
      ),1,1,'') as [Values] 
FROM cte c 

출력 :

Values 
Cl1 Blank=1;No=2 
Cl2 No=2;Yes=1 
Cl3 No=3 
Cl4 No=3 
Cl5 No=3 
Cl6 Yes=3 
Cl7 FeMale=1;Male=2 
Cl8 No=3 
Cl9 No=3 
관련 문제