22,301
社区成员




create table 采购申请表(申请单ID int,名称 varchar(10),单位 varchar(10),数量 int)
insert into 采购申请表 values(1, '铜杆', '吨', 300)
insert into 采购申请表 values(2, '铝杆', '吨', 100)
create table 订货表(订货ID int,申请单ID int,名称 varchar(10),单位 varchar(10),申购数量 int,订货数量 int)
insert into 订货表 values(1 ,1 ,'铜杆', '吨', 300, 50)
insert into 订货表 values(2 ,1 ,'铜杆', '吨', 300, 100)
insert into 订货表 values(3 ,1 ,'铜杆', '吨', 300, 150)
go
select t1.申请单ID 申请单号 ,t1.名称 ,t1.单位 ,申购数量 =
(case when 订货ID = (select min(订货ID) from (select m.* , isnull(n.订货ID,1) 订货ID,n.订货数量 from 采购申请表 m left join 订货表 n on m.申请单ID = n.申请单ID) t2 where t2.申请单ID = t1.申请单ID) then ltrim(数量) else '' end)
,isnull(cast(t1.订货数量 as varchar),'') 订货数量
from (select m.* , isnull(n.订货ID,1) 订货ID,n.订货数量 from 采购申请表 m left join 订货表 n on m.申请单ID = n.申请单ID) t1
drop table 采购申请表,订货表
/*
申请单号 名称 单位 申购数量 订货数量
----------- ---------- ---------- ------------ ------------------------------
1 铜杆 吨 300 50
1 铜杆 吨 100
1 铜杆 吨 150
2 铝杆 吨 100
(所影响的行数为 4 行)
*/
create table 订货表(订货ID int,申请单ID int,名称 varchar(10),单位 varchar(10),申购数量 int,订货数量 int)
insert into 订货表 values(1 ,1 ,'铜杆', '吨', 300, 50)
insert into 订货表 values(2 ,1 ,'铜杆', '吨', 300, 100)
insert into 订货表 values(3 ,1 ,'铜杆', '吨', 300, 150)
go
select m.申请单ID 申请单号 ,m.名称 ,m.单位 ,申购数量=
(case when 订货ID = (select min(订货ID) from 订货表 where 申请单ID = m.申请单ID) then ltrim(申购数量) else '' end)
,订货数量
from 订货表 m
drop table 订货表
/*
申请单号 名称 单位 申购数量 订货数量
----------- ---------- ---------- ------------ -----------
1 铜杆 吨 300 50
1 铜杆 吨 100
1 铜杆 吨 150
(所影响的行数为 3 行)
*/
select
申请单ID as 申请单号,
名称,
单位,
申购数量=case when px=1 then ltrim(申购数量) else '' end,
订货数量
from
(select *,px=row_number() over(partition by 申请单ID order by 订货ID) from 订货表) t
select m.申请单号 ,m.名称 ,m.单位 ,m.申购数量,
(case when m.订货ID = (select min(订货ID) from 申请单ID = m.申请单ID) then ltrim(订货数量) else '' end) 订货数量
from 订货表 m