DB2根据ID将每列转换为行

db2dz4w8  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(198)

我不知道从哪里开始,我读过关于pivot/lateral的文章,但是并不完全理解它们的用例,所以我不确定它们是否适用于这里。
起始表示例

ID, Firstname, Lastname, Age
0, John, Smith, 30
1, Jane, Doe, 40
2, Fake, Name, 50

我希望将此表透视到以下内容...
预期结果示例

Id, ColumnName, ColumnValue
0, Firstname, John
0, Lastname, Smith
0, Age, 30
1, Firstname, Jane
1, LastName, Doe
1, Age, 40
2, FirstName, Fake
2, LastName, Name
2, Age, 50

我该怎么做呢?这个动作有名字吗?
谢谢你!

ycl3bljg

ycl3bljg1#

DB2中不存在Pivot语法,可以这样使用lateral:

with table1 (ID, Firstname, Lastname, Age) as (
  values
  (0, 'John', 'Smith', 30),
  (1, 'Jane', 'Doe', 40),
  (2, 'Fake', 'Name', 50)
)
select
  ID,rowtocolumns.*
from table1
  cross join lateral (
    values
    ('Firstname', Firstname),
    ('Lastname', Lastname),
    ('Age', varchar(age))
  ) as rowtocolumns(ColumnName, ColumnValue)

相关问题