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)
不知道从哪里开始,我读过 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)