我能够使用数据透视显示列中的每一行,但是当有多个值时,它仅显示行值之一。我的怀疑在于for循环中的MAX函数,但是还没有找到成功的替代方法。
我尝试了其他SQL函数。
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT ',' + QUOTENAME(Provincia)
FROM Codigos_Postales
GROUP BY Provincia
ORDER BY Provincia
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SET @query = N'SELECT Poblacion,' + @cols + N' from
(
select * from Codigos_Postales
) x
pivot
(
MAX(Codigo_Postal)
for Provincia in (' + @cols + N')
) p ORDER BY Poblacion ASC'
EXEC sp_executesql @query;
我要透视的表:
结果:
预期结果:
答案 0 :(得分:3)
如果我对内核有一定的了解,可以在您的源数据中添加ROW_NUMBER。示例PIVOT脚本如下。只需忽略最终输出中的RN列即可。
SET @query =
N'SELECT Poblacion,' + @cols + N' from
(
SELECT
ROW_NUMBER() OVER (ORDER BY Provincia) RN,
*
FROM Codigos_Postales
) x
PIVOT
(
MAX(Codigo_Postal)
FOR Provincia IN (' + @cols + N')
) p ORDER BY Poblacion ASC'