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
を