SQL Server 具有多行结果和重复数据的PIVOT

mrphzbgm  于 2022-12-28  发布在  其他
关注(0)|答案(1)|浏览(183)

我需要你的建议。
我想将这些行透视到一个列,其结果包含多个重复行
之前:
| 线型|线路名称|
| - ------| - ------|
| 内部|储存1|
| 马克龙|储存2|
| 内部|储存1|
| 马克龙|储存3|
| 过程|储存B|
| 马克龙|储存3|
之后:
| 内部|马克龙|过程|
| - ------| - ------| - ------|
| 储存1|储存2|储存B|
| 储存1|储存3||
| | 储存3||
我可以使用透视吗?或者有其他技巧可以做到这一点?
我试过使用常规的枢轴,但它只是不像我想要的工作。

SELECT *
FROM (
    SELECT
        [line_type],
        [line_name]
    FROM 
        [table_name]
) pvt
PIVOT (
    MAX(line_name)
    FOR [line_type] IN (
        [Internal],
        [Makloon],
        [Process]
    )
) AS pvt_table;

我尝试的PIVOT查询的结果:
| 内部|马克龙|过程|
| - ------| - ------| - ------|
| 储存1|储存3|储存B|

368yc8dk

368yc8dk1#

为了保持行分隔,需要一个不同的值,一种方法是使用ROW_NUMBER()窗口函数在每个透视表列中分配不同的值。
例如:

SELECT rn, [Internal], [Makloon], [Process]
FROM (
    SELECT
        [line_type],
        [line_name],
        ROW_NUMBER() OVER(PARTITION BY line_type ORDER BY line_name) AS rn
    FROM 
        [table_name]
) pvt
PIVOT (
    MAX(line_name)
    FOR [line_type] IN (
        [Internal],
        [Makloon],
        [Process]
    )
) AS pvt_table
ORDER BY rn;

rn可以从最终选择列表中删除。它放在那里是为了说明。
看这个db<>fiddle

相关问题