将两行合并/旋转为一行

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

想问一下怎样才能得到这个结果?

每个

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 不适用
sql sql-server merge pivot
1个回答
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

dbfiddle

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