如何使SQL Pivot显示多行

时间:2019-06-09 16:32:14

标签: sql sql-server

我能够使用数据透视显示列中的每一行,但是当有多个值时,它仅显示行值之一。我的怀疑在于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;

我要透视的表:

original table

结果:

table result

预期结果:

expected table result

1 个答案:

答案 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'