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



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

示例起始表

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

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

谢谢!

Pivot语法在DB2中不存在,您可以像这样使用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)  

最新更新