---没有测试 select a.*,需求总量=a.总数量,b.库存,缺货量=a.总数量-b.库存 from (select 采购单号,行号,商品,sum(数量) as 总数量 from a group by 采购单号,行号,商品)a left join (select 商品,库位,sum(库存) as 库存 from b group by 商品,库位)b on a.商品=b.商品
if object_id('tb')is not null drop table tb go create table tb(采购单号 varchar(10), 行号 int,商品 varchar(5), 数量 int) insert tb select 'A00001', 100 , 'GOOD1', 2000 union all select 'A00001', 200 , 'GOOD2', 4000 union all select 'A00001', 300 , 'GOOD3', 7000 union all select 'A00002', 100 , 'GOOD1', 3000 union all select 'A00002', 200 , 'GOOD2', 3000 if object_id('tc')is not null drop table tc go create table tc( 商品 varchar(5),库位 varchar(5), 库存 int) insert tc select 'GOOD1', 'K01', 1000 union all select 'GOOD1', 'K02', 2000 union all select 'GOOD2', 'K01', 4000 select 采购单号 , 行号,a.商品,数量, c.需求总量 ,b.库存数量,缺货量= c.需求总量-b.库存数量 from tb a left join (select 商品,sum(数量) as 需求总量 from tb group by 商品)c on a.商品=c.商品 left join (select 商品,sum(库存 )as 库存数量 from tc group by 商品)b on a.商品=b.商品采购单号 行号 商品 数量 需求总量 库存数量 缺货量 ---------- ----------- ----- ----------- ----------- ----------- ----------- A00001 100 GOOD1 2000 5000 3000 2000 A00001 200 GOOD2 4000 7000 4000 3000 A00001 300 GOOD3 7000 7000 NULL NULL A00002 100 GOOD1 3000 5000 3000 2000 A00002 200 GOOD2 3000 7000 4000 3000(5 行受影响)
create table [采购明细表] ( [采购单号] varchar(10), [行号] int, [商品] varchar(10), [数量] int ) insert into [采购明细表] select 'A00001',100,'GOOD1','2000' union all select 'A00001',200,'GOOD2','4000' union all select 'A00001',300,'GOOD3','7000' union all select 'A00002',100,'GOOD1','3000' union all select 'A00002',200,'GOOD2','3000' create table [库存表] ( [商品] varchar(10), [库位] varchar(3), [库存] int )insert into [库存表] select 'GOOD1','K01',1000 union all select 'GOOD1','K02',2000 union all select 'GOOD2','K01',4000select a.* ,b.[需求总量],isnull(c.[库存数量],0) [库存数量],b.[需求总量]-isnull(c.[库存数量],0) [缺货量] from [采购明细表] a left join (select [商品],sum([数量]) [需求总量] from [采购明细表] group by [商品])b on a.[商品]=b.商品 left join (select [商品],sum([库存]) [库存数量] from [库存表] group by [商品]) c on a.[商品]=c.[商品]
---------------------------------------------------------------- -- Author :fredrickhu(小F,向高手学习) -- Date :2009-10-22 21:10:01 -- Version: -- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) -- Nov 24 2008 13:01:59 -- Copyright (c) 1988-2005 Microsoft Corporation -- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3) -- ---------------------------------------------------------------- --> 测试数据:[a] if object_id('[a]') is not null drop table [a] go create table [a]([采购单号] varchar(6),[行号] int,[商品] varchar(5),[数量] int) insert [a] select 'A00001',100,'GOOD1',2000 union all select 'A00001',200,'GOOD2',4000 union all select 'A00001',300,'GOOD3',7000 union all select 'A00002',100,'GOOD1',3000 union all select 'A00002',200,'GOOD2',3000 --> 测试数据:[b] if object_id('[b]') is not null drop table [b] go create table [b]([商品] varchar(5),[库位] varchar(3),[库存] int) insert [b] select 'GOOD1','K01',1000 union all select 'GOOD1','K02',2000 union all select 'GOOD2','K01',4000 --------------开始查询-------------------------- select * from a left join (select a.商品,需求总量=a.总数量,isnull(b.库存,0) as 库存,缺货量=isnull((a.总数量-b.库存),0) from (select 商品,sum(数量) as 总数量 from a group by 商品)a left join (select 商品,sum(库存) as 库存 from b group by 商品)b on a.商品=b.商品)b on a.商品=b.商品----------------结果---------------------------- /* 采购单号 行号 商品 数量 商品 需求总量 库存 缺货量 ------ ----------- ----- ----------- ----- ----------- ----------- ----------- A00001 100 GOOD1 2000 GOOD1 5000 3000 2000 A00001 200 GOOD2 4000 GOOD2 7000 4000 3000 A00001 300 GOOD3 7000 GOOD3 7000 0 0 A00002 100 GOOD1 3000 GOOD1 5000 3000 2000 A00002 200 GOOD2 3000 GOOD2 7000 4000 3000(5 行受影响)*/
---难道是这样 ---------------------------------------------------------------- -- Author :fredrickhu(小F,向高手学习) -- Date :2009-10-22 21:10:01 -- Version: -- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) -- Nov 24 2008 13:01:59 -- Copyright (c) 1988-2005 Microsoft Corporation -- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3) -- ---------------------------------------------------------------- --> 测试数据:[a] if object_id('[a]') is not null drop table [a] go create table [a]([采购单号] varchar(6),[行号] int,[商品] varchar(5),[数量] int) insert [a] select 'A00001',100,'GOOD1',2000 union all select 'A00001',200,'GOOD2',4000 union all select 'A00001',300,'GOOD3',7000 union all select 'A00002',100,'GOOD1',3000 union all select 'A00002',200,'GOOD2',3000 --> 测试数据:[b] if object_id('[b]') is not null drop table [b] go create table [b]([商品] varchar(5),[库位] varchar(3),[库存] int) insert [b] select 'GOOD1','K01',1000 union all select 'GOOD1','K02',2000 union all select 'GOOD2','K01',4000 --------------开始查询-------------------------- select * from a left join (select a.商品,需求总量=a.总数量,isnull(b.库存,0) as 库存,缺货量=isnull((a.总数量-b.库存),a.总数量) from (select 商品,sum(数量) as 总数量 from a group by 商品)a left join (select 商品,sum(库存) as 库存 from b group by 商品)b on a.商品=b.商品)b on a.商品=b.商品----------------结果---------------------------- /* 采购单号 行号 商品 数量 商品 需求总量 库存 缺货量 ------ ----------- ----- ----------- ----- ----------- ----------- ----------- A00001 100 GOOD1 2000 GOOD1 5000 3000 2000 A00001 200 GOOD2 4000 GOOD2 7000 4000 3000 A00001 300 GOOD3 7000 GOOD3 7000 0 7000 A00002 100 GOOD1 3000 GOOD1 5000 3000 2000 A00002 200 GOOD2 3000 GOOD2 7000 4000 3000(5 行受影响)*/
---修改下if object_id('tb')is not null drop table tb go create table tb(采购单号 varchar(10), 行号 int,商品 varchar(5), 数量 int) insert tb select 'A00001', 100 , 'GOOD1', 2000 union all select 'A00001', 200 , 'GOOD2', 4000 union all select 'A00001', 300 , 'GOOD3', 7000 union all select 'A00002', 100 , 'GOOD1', 3000 union all select 'A00002', 200 , 'GOOD2', 3000 if object_id('tc')is not null drop table tc go create table tc( 商品 varchar(5),库位 varchar(5), 库存 int) insert tc select 'GOOD1', 'K01', 1000 union all select 'GOOD1', 'K02', 2000 union all select 'GOOD2', 'K01', 4000 select 采购单号 , 行号,a.商品,数量, 需求总量=isnull(c.需求总量,0) ,库存数量=isnull(b.库存数量,0),缺货量=isnull(c.需求总量,0)-isnull(b.库存数量,0) from tb a left join (select 商品,sum(数量) as 需求总量 from tb group by 商品)c on a.商品=c.商品 left join (select 商品,sum(库存)as 库存数量 from tc group by 商品)b on a.商品=b.商品采购单号 行号 商品 数量 需求总量 库存数量 缺货量 ---------- ----------- ----- ----------- ----------- ----------- ----------- A00001 100 GOOD1 2000 5000 3000 2000 A00001 200 GOOD2 4000 7000 4000 3000 A00001 300 GOOD3 7000 7000 0 7000 A00002 100 GOOD1 3000 5000 3000 2000 A00002 200 GOOD2 3000 7000 4000 3000(5 行受影响)
declare @采购明细表 table(采购单号 varchar(10),行号 int,商品 varchar(10),数量 int) insert into @采购明细表 select 'A00001',100,'GOOD1',2000 insert into @采购明细表 select 'A00001',200,'GOOD2',4000 insert into @采购明细表 select 'A00001',300,'GOOD3',7000 insert into @采购明细表 select 'A00002',100,'GOOD1',3000 insert into @采购明细表 select 'A00002',200,'GOOD2',3000declare @库存表 table(商品 varchar(10),库位 varchar(10),库存 int) insert into @库存表 select 'GOOD1','K01',1000 insert into @库存表 select 'GOOD1','K02',2000 insert into @库存表 select 'GOOD2','K01',4000select a.采购单号, a.行号, a.商品, a.数量, a.数量2 as 需求总量, isnull(b.库存2,0) as 库存数量, isnull(a.数量2,0)-isnull(b.库存2,0) as 缺货量 from ( select *,sum(数量) over(partition by 商品) as 数量2 from @采购明细表) a left join ( select distinct 商品,sum(库存) over(partition by 商品) as 库存2 from @库存表) b on a.商品=b.商品 A00001 100 GOOD1 2000 5000 3000 2000 A00002 100 GOOD1 3000 5000 3000 2000 A00002 200 GOOD2 3000 7000 4000 3000 A00001 200 GOOD2 4000 7000 4000 3000 A00001 300 GOOD3 7000 7000 0 7000
IF OBJECT_ID('[tba]') IS NOT NULL DROP TABLE [tba] go CREATE TABLE [tba] (采购单号 VARCHAR(6),行号 INT,商品 VARCHAR(5),数量 INT) INSERT INTO [tba] SELECT 'A00001',100,'GOOD1',2000 UNION ALL SELECT 'A00001',200,'GOOD2',4000 UNION ALL SELECT 'A00001',300,'GOOD3',7000 UNION ALL SELECT 'A00002',100,'GOOD1',3000 UNION ALL SELECT 'A00002',200,'GOOD2',3000 --------------------------------- -- Author: HEROWANG(让你望见影子的墙) -- Date : 2009-10-22 21:24:00 ---------------------------------
IF OBJECT_ID('[tbb]') IS NOT NULL DROP TABLE [tbb] go CREATE TABLE [tbb] (商品 VARCHAR(5),库位 VARCHAR(3),库存 INT) INSERT INTO [tbb] SELECT 'GOOD1','K01',1000 UNION ALL SELECT 'GOOD1','K02',2000 UNION ALL SELECT 'GOOD2','K01',4000select tba.*,需求总量,isnull(库存,0),缺货量=isnull(需求总量,0)-isnull(库存,0) from tba join (select 商品,需求总量=sum(数量) from tba group by 商品) a on tba.商品=a.商品 left join (select 商品,库存=sum(库存) from tbb group by 商品) b on tba.商品=b.商品A00001 100 GOOD1 2000 5000 3000 2000 A00002 100 GOOD1 3000 5000 3000 2000 A00002 200 GOOD2 3000 7000 4000 3000 A00001 200 GOOD2 4000 7000 4000 3000 A00001 300 GOOD3 7000 7000 0 7000
declare @采购明细表 table (采购单号 varchar(6),行号 int,商品 varchar(5),数量 int) insert into @采购明细表 select 'A00001',100,'GOOD1',2000 union all select 'A00001',200,'GOOD2',4000 union all select 'A00001',300,'GOOD3',7000 union all select 'A00002',100,'GOOD1',3000 union all select 'A00002',200,'GOOD2',3000declare @库存表 table (商品 varchar(5),库位 varchar(3),库存 int) insert into @库存表 select 'GOOD1','K01',1000 union all select 'GOOD1','K02',2000 union all select 'GOOD2','K01',4000select 采购单号,行号, 商品,数量,需求总量,库存数量,需求总量-库存数量 as 缺货量 from (select a.*,isnull(b.库存,0) as 库存数量,c.需求总量 from @采购明细表 a left join (select 商品, sum(库存) as 库存 from @库存表 group by 商品)b on a.商品=b.商品 left join (select 商品,sum(数量) as 需求总量 from @采购明细表 group by 商品) c on a.商品=c.商品 )d/* 采购单号 行号 商品 数量 需求总量 库存数量 缺货量 ------ ----------- ----- ----------- ----------- ----------- ----------- A00001 100 GOOD1 2000 5000 3000 2000 A00001 200 GOOD2 4000 7000 4000 3000 A00001 300 GOOD3 7000 7000 0 7000 A00002 100 GOOD1 3000 5000 3000 2000 A00002 200 GOOD2 3000 7000 4000 3000 */
if object_id('tb')is not null drop table tb go create table tb(采购单号 varchar(10), 行号 int,商品 varchar(5), 数量 int) insert tb select 'A00001', 100 , 'GOOD1', 2000 union all select 'A00001', 200 , 'GOOD2', 4000 union all select 'A00001', 300 , 'GOOD3', 7000 union all select 'A00002', 100 , 'GOOD1', 3000 union all select 'A00002', 200 , 'GOOD2', 3000 if object_id('tc')is not null drop table tc go create table tc( 商品 varchar(5),库位 varchar(5), 库存 int) insert tc select 'GOOD1', 'K01', 1000 union all select 'GOOD1', 'K02', 2000 union all select 'GOOD2', 'K01', 4000 go select 采购单号 , 行号 ,商品,数量,需求总量, 库存数量, 缺货量 = 需求总量 - 库存数量 from ( select 采购单号 , 行号 ,商品,数量, 需求总量 = isnull((select sum(数量) from tb where 商品 =t.商品) , 0), 库存数量 = isnull((select sum(库存) from tc where 商品 = t.商品) , 0) from tb t )a ---------------------------------------------- 采购单号 行号 商品 数量 需求总量 库存数量 缺货量 ---------- ----------- ----- ----------- ----------- ----------- ----------- A00001 100 GOOD1 2000 5000 3000 2000 A00001 200 GOOD2 4000 7000 4000 3000 A00001 300 GOOD3 7000 7000 0 7000 A00002 100 GOOD1 3000 5000 3000 2000 A00002 200 GOOD2 3000 7000 4000 3000
select
a.*,需求总量=a.总数量,b.库存,缺货量=a.总数量-b.库存
from
(select 采购单号,行号,商品,sum(数量) as 总数量 from a group by 采购单号,行号,商品)a
left join
(select 商品,库位,sum(库存) as 库存 from b group by 商品,库位)b
on
a.商品=b.商品
if object_id('tb')is not null drop table tb
go
create table tb(采购单号 varchar(10), 行号 int,商品 varchar(5), 数量 int)
insert tb select
'A00001', 100 , 'GOOD1', 2000 union all select
'A00001', 200 , 'GOOD2', 4000 union all select
'A00001', 300 , 'GOOD3', 7000 union all select
'A00002', 100 , 'GOOD1', 3000 union all select
'A00002', 200 , 'GOOD2', 3000 if object_id('tc')is not null drop table tc
go
create table tc( 商品 varchar(5),库位 varchar(5), 库存 int)
insert tc select
'GOOD1', 'K01', 1000 union all select
'GOOD1', 'K02', 2000 union all select
'GOOD2', 'K01', 4000
select 采购单号 , 行号,a.商品,数量,
c.需求总量 ,b.库存数量,缺货量= c.需求总量-b.库存数量
from tb a
left join
(select 商品,sum(数量) as 需求总量 from tb group by 商品)c
on a.商品=c.商品
left join
(select 商品,sum(库存 )as 库存数量 from tc group by 商品)b
on a.商品=b.商品采购单号 行号 商品 数量 需求总量 库存数量 缺货量
---------- ----------- ----- ----------- ----------- ----------- -----------
A00001 100 GOOD1 2000 5000 3000 2000
A00001 200 GOOD2 4000 7000 4000 3000
A00001 300 GOOD3 7000 7000 NULL NULL
A00002 100 GOOD1 3000 5000 3000 2000
A00002 200 GOOD2 3000 7000 4000 3000(5 行受影响)
(
[采购单号] varchar(10),
[行号] int,
[商品] varchar(10),
[数量] int
)
insert into [采购明细表]
select 'A00001',100,'GOOD1','2000' union all
select 'A00001',200,'GOOD2','4000' union all
select 'A00001',300,'GOOD3','7000' union all
select 'A00002',100,'GOOD1','3000' union all
select 'A00002',200,'GOOD2','3000' create table [库存表]
(
[商品] varchar(10),
[库位] varchar(3),
[库存] int
)insert into [库存表]
select 'GOOD1','K01',1000 union all
select 'GOOD1','K02',2000 union all
select 'GOOD2','K01',4000select a.* ,b.[需求总量],isnull(c.[库存数量],0) [库存数量],b.[需求总量]-isnull(c.[库存数量],0) [缺货量]
from [采购明细表] a
left join (select [商品],sum([数量]) [需求总量] from [采购明细表] group by [商品])b
on a.[商品]=b.商品
left join (select [商品],sum([库存]) [库存数量] from [库存表] group by [商品]) c on a.[商品]=c.[商品]
-- Author :fredrickhu(小F,向高手学习)
-- Date :2009-10-22 21:10:01
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[a]
if object_id('[a]') is not null drop table [a]
go
create table [a]([采购单号] varchar(6),[行号] int,[商品] varchar(5),[数量] int)
insert [a]
select 'A00001',100,'GOOD1',2000 union all
select 'A00001',200,'GOOD2',4000 union all
select 'A00001',300,'GOOD3',7000 union all
select 'A00002',100,'GOOD1',3000 union all
select 'A00002',200,'GOOD2',3000
--> 测试数据:[b]
if object_id('[b]') is not null drop table [b]
go
create table [b]([商品] varchar(5),[库位] varchar(3),[库存] int)
insert [b]
select 'GOOD1','K01',1000 union all
select 'GOOD1','K02',2000 union all
select 'GOOD2','K01',4000
--------------开始查询--------------------------
select
*
from
a
left join
(select
a.商品,需求总量=a.总数量,isnull(b.库存,0) as 库存,缺货量=isnull((a.总数量-b.库存),0)
from
(select 商品,sum(数量) as 总数量 from a group by 商品)a
left join
(select 商品,sum(库存) as 库存 from b group by 商品)b
on
a.商品=b.商品)b
on
a.商品=b.商品----------------结果----------------------------
/* 采购单号 行号 商品 数量 商品 需求总量 库存 缺货量
------ ----------- ----- ----------- ----- ----------- ----------- -----------
A00001 100 GOOD1 2000 GOOD1 5000 3000 2000
A00001 200 GOOD2 4000 GOOD2 7000 4000 3000
A00001 300 GOOD3 7000 GOOD3 7000 0 0
A00002 100 GOOD1 3000 GOOD1 5000 3000 2000
A00002 200 GOOD2 3000 GOOD2 7000 4000 3000(5 行受影响)*/
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2009-10-22 21:10:01
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[a]
if object_id('[a]') is not null drop table [a]
go
create table [a]([采购单号] varchar(6),[行号] int,[商品] varchar(5),[数量] int)
insert [a]
select 'A00001',100,'GOOD1',2000 union all
select 'A00001',200,'GOOD2',4000 union all
select 'A00001',300,'GOOD3',7000 union all
select 'A00002',100,'GOOD1',3000 union all
select 'A00002',200,'GOOD2',3000
--> 测试数据:[b]
if object_id('[b]') is not null drop table [b]
go
create table [b]([商品] varchar(5),[库位] varchar(3),[库存] int)
insert [b]
select 'GOOD1','K01',1000 union all
select 'GOOD1','K02',2000 union all
select 'GOOD2','K01',4000
--------------开始查询--------------------------
select
*
from
a
left join
(select
a.商品,需求总量=a.总数量,isnull(b.库存,0) as 库存,缺货量=isnull((a.总数量-b.库存),a.总数量)
from
(select 商品,sum(数量) as 总数量 from a group by 商品)a
left join
(select 商品,sum(库存) as 库存 from b group by 商品)b
on
a.商品=b.商品)b
on
a.商品=b.商品----------------结果----------------------------
/* 采购单号 行号 商品 数量 商品 需求总量 库存 缺货量
------ ----------- ----- ----------- ----- ----------- ----------- -----------
A00001 100 GOOD1 2000 GOOD1 5000 3000 2000
A00001 200 GOOD2 4000 GOOD2 7000 4000 3000
A00001 300 GOOD3 7000 GOOD3 7000 0 7000
A00002 100 GOOD1 3000 GOOD1 5000 3000 2000
A00002 200 GOOD2 3000 GOOD2 7000 4000 3000(5 行受影响)*/
---修改下if object_id('tb')is not null drop table tb
go
create table tb(采购单号 varchar(10), 行号 int,商品 varchar(5), 数量 int)
insert tb select
'A00001', 100 , 'GOOD1', 2000 union all select
'A00001', 200 , 'GOOD2', 4000 union all select
'A00001', 300 , 'GOOD3', 7000 union all select
'A00002', 100 , 'GOOD1', 3000 union all select
'A00002', 200 , 'GOOD2', 3000 if object_id('tc')is not null drop table tc
go
create table tc( 商品 varchar(5),库位 varchar(5), 库存 int)
insert tc select
'GOOD1', 'K01', 1000 union all select
'GOOD1', 'K02', 2000 union all select
'GOOD2', 'K01', 4000
select 采购单号 , 行号,a.商品,数量,
需求总量=isnull(c.需求总量,0) ,库存数量=isnull(b.库存数量,0),缺货量=isnull(c.需求总量,0)-isnull(b.库存数量,0)
from tb a
left join
(select 商品,sum(数量) as 需求总量 from tb group by 商品)c
on a.商品=c.商品
left join
(select 商品,sum(库存)as 库存数量 from tc group by 商品)b
on a.商品=b.商品采购单号 行号 商品 数量 需求总量 库存数量 缺货量
---------- ----------- ----- ----------- ----------- ----------- -----------
A00001 100 GOOD1 2000 5000 3000 2000
A00001 200 GOOD2 4000 7000 4000 3000
A00001 300 GOOD3 7000 7000 0 7000
A00002 100 GOOD1 3000 5000 3000 2000
A00002 200 GOOD2 3000 7000 4000 3000(5 行受影响)
insert into @采购明细表 select 'A00001',100,'GOOD1',2000
insert into @采购明细表 select 'A00001',200,'GOOD2',4000
insert into @采购明细表 select 'A00001',300,'GOOD3',7000
insert into @采购明细表 select 'A00002',100,'GOOD1',3000
insert into @采购明细表 select 'A00002',200,'GOOD2',3000declare @库存表 table(商品 varchar(10),库位 varchar(10),库存 int)
insert into @库存表 select 'GOOD1','K01',1000
insert into @库存表 select 'GOOD1','K02',2000
insert into @库存表 select 'GOOD2','K01',4000select
a.采购单号,
a.行号,
a.商品,
a.数量,
a.数量2 as 需求总量,
isnull(b.库存2,0) as 库存数量,
isnull(a.数量2,0)-isnull(b.库存2,0) as 缺货量
from (
select *,sum(数量) over(partition by 商品) as 数量2
from @采购明细表) a left join (
select distinct 商品,sum(库存) over(partition by 商品) as 库存2
from @库存表) b on a.商品=b.商品
A00001 100 GOOD1 2000 5000 3000 2000
A00002 100 GOOD1 3000 5000 3000 2000
A00002 200 GOOD2 3000 7000 4000 3000
A00001 200 GOOD2 4000 7000 4000 3000
A00001 300 GOOD3 7000 7000 0 7000
---------------------------------
-- Author: HEROWANG(让你望见影子的墙)
-- Date : 2009-10-22 21:23:46
---------------------------------
IF OBJECT_ID('[tba]') IS NOT NULL
DROP TABLE [tba]
go
CREATE TABLE [tba] (采购单号 VARCHAR(6),行号 INT,商品 VARCHAR(5),数量 INT)
INSERT INTO [tba]
SELECT 'A00001',100,'GOOD1',2000 UNION ALL
SELECT 'A00001',200,'GOOD2',4000 UNION ALL
SELECT 'A00001',300,'GOOD3',7000 UNION ALL
SELECT 'A00002',100,'GOOD1',3000 UNION ALL
SELECT 'A00002',200,'GOOD2',3000
---------------------------------
-- Author: HEROWANG(让你望见影子的墙)
-- Date : 2009-10-22 21:24:00
---------------------------------
IF OBJECT_ID('[tbb]') IS NOT NULL
DROP TABLE [tbb]
go
CREATE TABLE [tbb] (商品 VARCHAR(5),库位 VARCHAR(3),库存 INT)
INSERT INTO [tbb]
SELECT 'GOOD1','K01',1000 UNION ALL
SELECT 'GOOD1','K02',2000 UNION ALL
SELECT 'GOOD2','K01',4000select tba.*,需求总量,isnull(库存,0),缺货量=isnull(需求总量,0)-isnull(库存,0)
from tba join (select 商品,需求总量=sum(数量) from tba group by 商品) a on tba.商品=a.商品
left join (select 商品,库存=sum(库存) from tbb group by 商品) b on tba.商品=b.商品A00001 100 GOOD1 2000 5000 3000 2000
A00002 100 GOOD1 3000 5000 3000 2000
A00002 200 GOOD2 3000 7000 4000 3000
A00001 200 GOOD2 4000 7000 4000 3000
A00001 300 GOOD3 7000 7000 0 7000
declare @采购明细表 table (采购单号 varchar(6),行号 int,商品 varchar(5),数量 int)
insert into @采购明细表
select 'A00001',100,'GOOD1',2000 union all
select 'A00001',200,'GOOD2',4000 union all
select 'A00001',300,'GOOD3',7000 union all
select 'A00002',100,'GOOD1',3000 union all
select 'A00002',200,'GOOD2',3000declare @库存表 table (商品 varchar(5),库位 varchar(3),库存 int)
insert into @库存表
select 'GOOD1','K01',1000 union all
select 'GOOD1','K02',2000 union all
select 'GOOD2','K01',4000select 采购单号,行号, 商品,数量,需求总量,库存数量,需求总量-库存数量 as 缺货量 from
(select a.*,isnull(b.库存,0) as 库存数量,c.需求总量 from @采购明细表 a
left join
(select 商品, sum(库存) as 库存 from @库存表 group by 商品)b on a.商品=b.商品
left join (select 商品,sum(数量) as 需求总量 from @采购明细表 group by 商品) c on a.商品=c.商品
)d/*
采购单号 行号 商品 数量 需求总量 库存数量 缺货量
------ ----------- ----- ----------- ----------- ----------- -----------
A00001 100 GOOD1 2000 5000 3000 2000
A00001 200 GOOD2 4000 7000 4000 3000
A00001 300 GOOD3 7000 7000 0 7000
A00002 100 GOOD1 3000 5000 3000 2000
A00002 200 GOOD2 3000 7000 4000 3000
*/
if object_id('tb')is not null drop table tb
go
create table tb(采购单号 varchar(10), 行号 int,商品 varchar(5), 数量 int)
insert tb select
'A00001', 100 , 'GOOD1', 2000 union all select
'A00001', 200 , 'GOOD2', 4000 union all select
'A00001', 300 , 'GOOD3', 7000 union all select
'A00002', 100 , 'GOOD1', 3000 union all select
'A00002', 200 , 'GOOD2', 3000 if object_id('tc')is not null drop table tc
go
create table tc( 商品 varchar(5),库位 varchar(5), 库存 int)
insert tc select
'GOOD1', 'K01', 1000 union all select
'GOOD1', 'K02', 2000 union all select
'GOOD2', 'K01', 4000
go
select 采购单号 , 行号 ,商品,数量,需求总量, 库存数量, 缺货量 = 需求总量 - 库存数量
from
(
select 采购单号 , 行号 ,商品,数量,
需求总量 = isnull((select sum(数量) from tb where 商品 =t.商品) , 0),
库存数量 = isnull((select sum(库存) from tc where 商品 = t.商品) , 0)
from tb t
)a
----------------------------------------------
采购单号 行号 商品 数量 需求总量 库存数量 缺货量
---------- ----------- ----- ----------- ----------- ----------- -----------
A00001 100 GOOD1 2000 5000 3000 2000
A00001 200 GOOD2 4000 7000 4000 3000
A00001 300 GOOD3 7000 7000 0 7000
A00002 100 GOOD1 3000 5000 3000 2000
A00002 200 GOOD2 3000 7000 4000 3000