想问一下怎样才能得到这个结果?
每个
id_item
只有两行数据。需要将相同的 id_item
行合并到不同的列(IN 和 OUT),包括日期和 qty
。
我目前的数据:
id_交易 | id_项目 | 商品名称 | 品牌 | 类型 | 数量 | 日期 |
---|---|---|---|---|---|---|
4 | 83 | 玻璃酒 | XYZ | 在 | 100 | 2023-01-01 |
4 | 84 | 塑料杯 | 宜家 | 在 | 50 | 2023-01-01 |
5 | 83 | 玻璃酒 | XYZ | 出 | 10 | 2023-03-20 |
预期结果:
id_项目 | 商品名称 | 品牌 | 在 | 日期 | 出 | 日期 |
---|---|---|---|---|---|---|
83 | 玻璃酒 | XYZ | 100 | 2023-01-01 | 10 | 2023-03-20 |
84 | 塑料杯 | 宜家 | 50 | 2023-01-01 | 0 | 不适用 |
数据
CREATE TABLE mytable(
id_transaction INTEGER NOT NULL
,id_item INTEGER NOT NULL
,item_name VARCHAR(20) NOT NULL
,brand VARCHAR(20) NOT NULL
,type VARCHAR(20) NOT NULL
,qty INTEGER NOT NULL
,date DATE NOT NULL
);
INSERT INTO mytable
(id_transaction,id_item,item_name,brand,type,qty,date) VALUES
(4,83,'Glass Wine','XYZ','IN',100,'2023-01-01'),
(4,84,'Plastic Cup','IKEA','IN',50,'2023-01-01'),
(5,83,'Glass Wine','XYZ','OUT',100,'2023-03-20');--error
不要使用
pivot
,使用case with max
select
id_item,
item_name,
brand,
qty,
max(case when type='IN' then date end ) as 'IN',
max(case when type='OUT' then date end) as 'OUT'
from mytable
group by id_item,
item_name,
brand,
qty