如何将结果1转换为结果2。我无法使用数据透视表获取result2。
结果1
结果1查询
SELECT Country,City,Count(*) as "Count"
FROM Customers
GROUP BY Country,City
结果2
答案 0 :(得分:1)
除了PIVOT
以外,没有SQL的其他功能,如您所发现的,您需要预先知道这些值。
此格式通常在系统的输出部分(例如报表引擎)中完成。例如,SSRS可以很好地处理此问题,并且开箱即用。
您需要动态SQL才能在堆栈中实现这一目标。
答案 1 :(得分:0)
尝试使用此动态sql
IF OBJECT_ID('tempdb..#Temp') IS NOT NULL
DROP TABLE #Temp
CREATE TABLE #Temp([Country] VARCHAR(20),[City] VARCHAR(20),[Count] INT)
INSERT INTO #Temp
SELECT 'Germany' ,'Aachen' ,1 UNION ALL
SELECT 'USA' ,'Albuquerque',1 UNION ALL
SELECT 'USA' ,'Anchorage' ,1 UNION ALL
SELECT 'Denmark' ,'Arhus' ,1 UNION ALL
SELECT 'Spain' ,'Barcelone' ,1
DECLARE @Colmn nvarchar(max),
@Sql nvarchar(max)
SELECT @Colmn=STUFF((SELECT distinct ', '+QUOTENAME([Country]) FROM #Temp
FOR XML PATH ('')),1,1,'')
SET @Sql =' SELECT Cityynames ,'+ @Colmn +' FROM
(
SELECT *,Country AS Countrynames,City AS Cityynames
FROM #Temp
)dt
PIVOT
(
MAX([Count]) FOR [Country] IN ('+@Colmn+')
) AS Pvt'
PRINT @Sql
EXEC (@Sql)