将多个列堆叠在一个中 - SQL

问题描述 投票:0回答:1

我有一个表,列是“名称”“产品”“类型”“日期”“类型1”“日期1”“类型2”“日期2”.....(直到类型23日期23)

我想在“类型”列下堆叠“类型1”、“类型2”,以及在“日期”列下堆叠类似的“日期1”、“日期2”。我不想使用 UNION ALL,所以我正在寻找其他替代方案,例如游标 for 循环。

这就是我的数据的样子:

Name Product Type Date Type1 Date1 Type2 Date2
John AA1     xx   12/31 yy   10/30 zz    7/30

这就是我想要的样子:

Name Product Type Date
John AA1     xx   12/31
John AA1     yy   10/30
John AA1     zz   7/30

如何使用游标for循环或任何其他有效的方法来实现这一点?我已经连接了 DB2 表,并且正在使用 Oracle SQL Developer 来查询我的数据。

sql for-loop db2 cursor
1个回答
0
投票

可能有几种方法可以做到这种事情。这是一种选择。

CREATE TABLE your_table (
    Name VARCHAR(50),
    Product VARCHAR(50),
    Type VARCHAR(50),
    Date DATE,
    Type1 VARCHAR(50),
    Date1 DATE,
    Type2 VARCHAR(50),
    Date2 DATE
);

INSERT INTO your_table (Name, Product, Type, Date, Type1, Date1, Type2, Date2)
VALUES 
    ('John', 'AA1', 'xx', '2023-12-31', 'yy', '2023-10-30', 'zz', '2023-07-30')


select * from your_table


SELECT Name, Product, Type, Date FROM your_table WHERE Type1 IS NOT NULL
UNION ALL
SELECT Name, Product, Type1, Date1 FROM your_table WHERE Type1 IS NOT NULL
UNION ALL
SELECT Name, Product, Type2, Date2 FROM your_table WHERE Type2 IS NOT NULL;

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.