我有一个表,列是“名称”“产品”“类型”“日期”“类型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 来查询我的数据。
可能有几种方法可以做到这种事情。这是一种选择。
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;
结果: