订单表
订单号 产品名称 订单数量 单位
131110 AA 100 华能
配送表
订单号 产品名称 配送数量 出货仓库 单位
131110 AA 100 A 华能
出库表
订单号 产品名称 出库数量 出货仓库
131110 AA 30 A
131110 AA 40 B
131110 AA 20 C
要求结果
订单号 产品名称 订单数量 配送数量 出库数量 单位 出货仓库 未出库数量
131110 AA 100 100 30 华能 A 10
131110 AA 100 100 40 华能 B 10
131110 AA 100 100 20 华能 C 10
订单号 产品名称 订单数量 单位
131110 AA 100 华能
配送表
订单号 产品名称 配送数量 出货仓库 单位
131110 AA 100 A 华能
出库表
订单号 产品名称 出库数量 出货仓库
131110 AA 30 A
131110 AA 40 B
131110 AA 20 C
要求结果
订单号 产品名称 订单数量 配送数量 出库数量 单位 出货仓库 未出库数量
131110 AA 100 100 30 华能 A 10
131110 AA 100 100 40 华能 B 10
131110 AA 100 100 20 华能 C 10
select a.订单号,a.产品名称,a.订单数量,b.配送数量,c.出库数量,a.单位,c.出货仓库,
b.配送数量-c.出库数量 as 未出库数量
from 订单表 a
left join 配送表 b on a.订单号=b.订单号 and a.产品名称=b.产品名称
left join 出库表 c on a.订单号=c.订单号 and a.产品名称=c.产品名称
(
select 131110,'AA',100,'华能'
),
配送表(订单号,产品名称,配送数量,出货仓库,单位) as
(
select 131110,'AA',100,'A','华能'
),
出库表(订单号,产品名称,出库数量,出货仓库 ) as
(
select 131110,'AA',30,'A'
union all select 131110,'AA',40,'B'
union all select 131110,'AA',20,'C'
)
select a.订单号,a.产品名称,a.订单数量,b.配送数量,c.出库数量,a.单位,c.出货仓库,
b.配送数量-c.出库数量 as 未出库数量
from 订单表 a
left join 配送表 b on a.订单号=b.订单号 and a.产品名称=b.产品名称
left join 出库表 c on a.订单号=c.订单号 and a.产品名称=c.产品名称/*
订单号 产品名称 订单数量 配送数量 出库数量 单位 出货仓库 未出库数量
--------------------------------------------------------------------------------------
131110 AA 100 100 30 华能 A 70
131110 AA 100 100 40 华能 B 60
131110 AA 100 100 20 华能 C 80
*/
(
[订单号] VARCHAR(10)
,[产品名称] CHAR(2)
,[订单数量] INT
,[单位] NVARCHAR(20)
)
INSERT INTO #订单表
VALUES('131110', 'AA', 100, N'华能')
CREATE TABLE #配送表
(
[订单号] VARCHAR(10)
,[产品名称] CHAR(2)
,[配送数量] INT
,[出货仓库] CHAR(1)
,[单位] NVARCHAR(20)
)
INSERT INTO #配送表
VALUES('131110', 'AA', 100, 'A', N'华能')
CREATE TABLE #出库表
(
[订单号] VARCHAR(10)
,[产品名称] CHAR(2)
,[出库数量] INT
,[出货仓库] CHAR(1)
)
INSERT INTO #出库表
SELECT '131110', 'AA',30,'A'UNION ALL
SEleCT '131110', 'AA',40,'B'UNION ALL
SEleCT '131110', 'AA',20,'c'SELECT A.订单号
,A.产品名称
,A.订单数量
,B.配送数量
,C.出库数量
,A.单位
,C.出货仓库
,A.订单数量
-(SELECT SUM(出库数量)
FROM #出库表 AS D
WHERE D.订单号=A.订单号 ) AS [未出库数量]
FROM #订单表 AS A
JOIN #配送表 AS B ON A.订单号=B.订单号
JOIN #出库表 AS C ON A.订单号=C.订单号DROP TABLE #订单表
DROP TABLE #配送表
DROP TABLE #出库表
;with 订单表(订单号,产品名称,订单数量,单位) as
(
select 131110,'AA',100,'华能'
),
配送表(订单号,产品名称,配送数量,出货仓库,单位) as
(
select 131110,'AA',100,'A','华能'
),
出库表(订单号,产品名称,出库数量,出货仓库 ) as
(
select 131110,'AA',30,'A'
union all select 131110,'AA',40,'B'
union all select 131110,'AA',20,'C'
)select a.订单号,a.产品名称,a.订单数量,b.配送数量,c.出库数量,a.单位,c.出货仓库,
b.配送数量-(select sum(d.出库数量)
from 出库表 d
where d.订单号 = a.订单号 and
d.产品名称 = a.产品名称) as 未出库数量
from 订单表 a
left join 配送表 b on a.订单号=b.订单号 and a.产品名称=b.产品名称
left join 出库表 c on a.订单号=c.订单号 and a.产品名称=c.产品名称/*
订单号 产品名称 订单数量 配送数量 出库数量 单位 出货仓库 未出库数量
131110 AA 100 100 30 华能 A 10
131110 AA 100 100 40 华能 B 10
131110 AA 100 100 20 华能 C 10
*/方法2,适合sql server 2005:select a.订单号,a.产品名称,a.订单数量,b.配送数量,c.出库数量,a.单位,c.出货仓库,
b.配送数量-(sum(c.出库数量) over(partition by a.订单号,a.产品名称)) as 未出库数量
from 订单表 a
left join 配送表 b on a.订单号=b.订单号 and a.产品名称=b.产品名称
left join 出库表 c on a.订单号=c.订单号 and a.产品名称=c.产品名称/*
订单号 产品名称 订单数量 配送数量 出库数量 单位 出货仓库 未出库数量
131110 AA 100 100 30 华能 A 10
131110 AA 100 100 40 华能 B 10
131110 AA 100 100 20 华能 C 10
*/
from 订单表 a
left join 配送表 b
on a.订单号 = b.订单号
left join 出库表 c
on a.订单号=c.订单号