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

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

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

  1. SELECT *
  2. FROM (
  3. SELECT
  4. [line_type],
  5. [line_name]
  6. FROM
  7. [table_name]
  8. ) pvt
  9. PIVOT (
  10. MAX(line_name)
  11. FOR [line_type] IN (
  12. [Internal],
  13. [Makloon],
  14. [Process]
  15. )
  16. ) AS pvt_table;

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

368yc8dk

368yc8dk1#

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

  1. SELECT rn, [Internal], [Makloon], [Process]
  2. FROM (
  3. SELECT
  4. [line_type],
  5. [line_name],
  6. ROW_NUMBER() OVER(PARTITION BY line_type ORDER BY line_name) AS rn
  7. FROM
  8. [table_name]
  9. ) pvt
  10. PIVOT (
  11. MAX(line_name)
  12. FOR [line_type] IN (
  13. [Internal],
  14. [Makloon],
  15. [Process]
  16. )
  17. ) AS pvt_table
  18. ORDER BY rn;

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

展开查看全部

相关问题