出入库关联

create table 物资(id int, name varchar(10))
insert into 物资 values(1 , '物A')
create table 入库(id int , 物资id int, dt datetime)
insert into 入库 values(1 , 1 , getdate()-1)
insert into 入库 values(1 , 1 , getdate()-2)
create table 出库(id int , 物资id int, dt datetime)
insert into 出库 values(1 , 1 , getdate()-1)
insert into 出库 values(1 , 1 , getdate()-2)
insert into 出库 values(1 , 1 , getdate()-3)
insert into 出库 values(1 , 1 , getdate()-4)
go

select t1.name , t2.入库 , t2.出库 from 物资 t1,
(
select isnull(m.物资id , n.物资id) 物资id ,
       isnull('入'+cast(m.px as varchar), '') 入库,
       isnull('出'+cast(n.px as varchar), '') 出库
from
(select *, px = (select count(1) from 入库 where 物资id = t.物资id and dt < t.dt) + 1 from 入库 t) m
full join
(select *, px = (select count(1) from 出库 where 物资id = t.物资id and dt < t.dt) + 1 from 出库 t) n
on m.物资id = n.物资id and m.px = n.px
) t2
where t1.id = t2.物资id
order by case 入库 when '' then 2 else 1 end, 入库 , 
         case 出库 when '' then 2 else 1 end, 出库

drop table 物资,入库,出库
======================================================================================
/*
name       入库                               出库                              
---------- -------------------------------- --------------------------------
物A         入1                               出1
物A         入2                               出2
物A                                          出3
物A                                          出4

(所影响的行数为 4 行)
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值