入库表A:
id 合同号 产品ID 入库数量 入库日期
1 cno-1 121 100 2013-9-14
2 cno-1 122 200 2013-9-14
3 cno-2 121 50 2013-9-17
出库表B:
id 合同号 产品ID 出库数量 出库日期
1 cno-1 121 10 2013-9-20
2 cno-1 122 100 2013-9-22
3 cno-1 121 30 2013-9-23
求入库总量不等于出库总量的单号
------解决方案--------------------
;with ta(id,合同号,产品ID,入库数量,入库日期) as
(
select 1,'cno-1',121,100,'2013-9-14'
union all select 2,'cno-1',122,200,'2013-9-14'
union all select 3,'cno-2',121,50,'2013-9-17'
),
tb(id,合同号,产品ID,出库数量,出库日期) as
(
select 1,'cno-1',121,10,'2013-9-20'
union all select 2,'cno-1',122,100,'2013-9-22'
union all select 3,'cno-1',121,30,'2013-9-23'
)
select a.合同号
from (select 合同号,SUM(入库数量) as 入库数量 from ta group by 合同号)a
left join (select 合同号,SUM(出库数量) as 出库数量 from tb group by 合同号)b
on a.合同号=b.合同号
where a.入库数量<>isnull(b.出库数量,0)
/*
合同号
cno-1
cno-2
*/
你的单号是指合同号吗?还是产品ID,如果是产品ID,就改一下就可以了
------解决方案--------------------
----------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2013-09-27 09:36:34
-- Verstion:
-- Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
-- Feb 10 2012 19:39:15
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
--
----------------------------
--> 测试数据:[A]
if object_id('[A]') is not null drop table [A]
go
create table [A]([id] int,[合同号] varchar(5),[产品ID] int,[入库数量] int,[入库日期] datetime)
insert [A]
select 1,'cno-1',121,100,'2013-9-14' union all
select 2,'cno-1',122,200,'2013-9-14' union all
select 3,'cno-2',121,50,'2013-9-17'
--> 测试数据:[B]
if object_id('[B]') is not null drop table [B]
go
create table [B]([id] int,[合同号] varchar(5),[产品ID] int,[出库数量] int,[出库日期] datetime)
insert [B]
select 1,'cno-1',121,10,'2013-9-20' union all
select 2,'cno-1',122,100,'2013-9-22' union all
select 3,'cno-1',121,30,'2013-9-23'
--------------开始查询--------------------------
SELECT
a.产品ID, ISNULL(a.入库数量,0)-ISNULL(b.出库数量,0) AS 库存
FROM
(select 产品ID,SUM(入库数量) AS 入库数量 from [A] GROUP BY 产品ID)a
JOIN
(select 产品ID,SUM(出库数量) AS 出库数量 from [B] GROUP BY 产品ID)b
ON
a.产品ID=b.产品ID
WHERE
ISNULL(a.入库数量,0)-ISNULL(b.出库数量,0)>0
----------------结果----------------------------
/* 产品ID 库存
----------- -----------
121 110
122 100
(2 行受影响)
*/
------解决方案--------------------
if OBJECT_ID('tba') is not null drop table tba
create table tba(id int,[合同号] varchar(10),[产品ID] int,[入库数量]int,[入库日期] varchar(10))
insert into tba(id,[合同号],[产品ID],[入库数量],[入库日期])
select 1,'cno-1',121,100,'2013-9-14' union all
select 2,'cno-1',122,200,'2013-9-14' union all
select 3,'cno-2',121,50,'2013-9-17'
if OBJECT_ID('tbb') is not null drop table tbb
create table tbb(id int,[合同号] varchar(10),[产品ID] int,[出库数量] int,[出库日期] varchar(10))
insert into tbb(id,[合同号],[产品ID],[出库数量],[出库日期])
select 1,'cno-1',121,10,'2013-9-20' union all
select 2,'cno-1',122,100,'2013-9-22' union all
select 3,'cno-1',121,30,'2013-9-23'
select a.合同号,a.产品ID,[剩余库存]=ISNULL(a.[该合同该产品入库数量],0)-ISNULL(b.[该合同该产品出库数量],0)
from(
select a.合同号,a.产品ID,SUM([入库数量]) as [该合同该产品入库数量]
from tba a with(nolock) group by a.[合同号],a.[产品ID]