DB2 根据 ID 将每一列转换为一行

DB2 Convert Each Column to a Row based on ID

不知道从哪里开始,我读过 pivot/lateral 但不完全理解他们的用例,所以我不确定他们是否适用于此。无论如何,它们似乎不在我的 DB2 版本中。

示例开始 Table

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

我希望将此 table 转向以下...

示例预期结果

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

我应该怎么做?这个动作有名字吗?

谢谢!

DB2 中不存在透视语法,您可以像这样使用横向语法:

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)