IF OBJECT_ID('Tempdb..#Temp') IS NOT NULL
Drop table #Temp
DECLARE @TabA Table (NameId INT,Name Varchar(100))
INSERT INTO @TabA
SELECT 11,'Ancillary' Union all
SELECT 22,'Reviews' Union all
SELECT 33,'Audit' Union all
SELECT 44,'Logging'
DECLARE @TabB Table (id INT, NameId INT,CountyId INT)
INSERT INTO @TabB
SELECT 51,11,1 UNION ALL
SELECT 52,11,1 UNION ALL
SELECT 53,11,2 UNION ALL
SELECT 54,22,2 UNION ALL
SELECT 55,22,3 UNION ALL
SELECT 56,33,3 UNION ALL
SELECT 57,33,3 UNION ALL
SELECT 57,44,3
SELECT B.CountyId,
A.Name,
COUNT(A.Name) Over(Partition by B.CountyId,A.Name Order by B.CountyId) AS CountName
INTO #Temp from @TabA A
LEFT join @TabB B
On b.NameId=a.NameId
DECLARE @Coulmn nvarchar(max),
@Coulmn2 nvarchar(max),
@SumCoulmn nvarchar(max),
@Sql nvarchar(max)
SELECT @Coulmn=STUFF((SELECT DISTINCT ', '+ '['+ Name +']' From #Temp
FOR XML PATH ('')),1,1,'')
SELECT @SumCoulmn=STUFF((SELECT DISTINCT ', '+ + Name +'Count' From #Temp
FOR XML PATH ('')),1,1,'')
SET @SumCoulmn= '('+REPLACE(@SumCoulmn,',',' + ')+')'
SELECT @Coulmn2=STUFF((SELECT DISTINCT ', '+ 'ISNULL(' + Name + ',''0'')' +' AS ['+Name +'Count]' From #Temp
FOR XML PATH ('')),1,1,'')
SET @Sql='SELECT *,'[email protected]+ ' AS Total From
(
SELECT CountyId,'[email protected]+ ' From
(
SELECT * From #Temp
)As Src
PIVOT
(
MAX(CountName) FOR Name IN ('+ @Coulmn +')
)Pvt
)Dt
'
Print @Sql
Exec(@Sql)
搜索 '动态SQL支点',应该有一堆的结果。如果它实际上不需要是动态的(例如,您只有4个不同的实际需要计数),则可以执行常规透视(或案例聚合)。 – ZLK
[T-SQL动态数据透视表]的可能重复(https://stackoverflow.com/questions/12210692/t-sql-dynamic-pivot) – iamdave