首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求入库总量不等于出库总量的单号,该怎么处理

2013-09-29 
求入库总量不等于出库总量的单号入库表A:id 合同号 产品ID 入库数量 入库日期1cno-11211002013-9-142cno-1

求入库总量不等于出库总量的单号
入库表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]


)a left join(
  select b.合同号,b.产品ID,SUM([出库数量]) as [该合同该产品出库数量] 
  from tbb b with(nolock) group by b.[合同号],b.[产品ID]
)b on a.合同号=b.合同号 and a.产品ID=b.产品ID
where ABS(ISNULL(a.[该合同该产品入库数量],0)-ISNULL(b.[该合同该产品出库数量],0))>0
/**
合同号        产品ID        剩余库存
---------- ----------- -----------
cno-1      121         60
cno-1      122         100
cno-2      121         50
*/

SELECT a.[产品ID], ISNULL(a.[入库数量],0)-ISNULL(b.[出库数量],0) AS [剩余库存]
FROM(select [产品ID],SUM([入库数量]) AS [入库数量] from tba GROUP BY [产品ID])a
left join 
(select [产品ID],SUM([出库数量]) AS [出库数量] from tbb GROUP BY [产品ID])b
ON a.[产品ID]=b.[产品ID]
WHERE ISNULL(a.[入库数量],0)-ISNULL(b.[出库数量],0)>0
/**
产品ID        剩余库存
----------- -----------
121         110
122         100
*/
--根据你自己的需求选择一种吧


[解决办法]
----------------------------
-- 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.合同号--, ISNULL(a.入库数量,0)-ISNULL(b.出库数量,0) AS 库存
FROM
(select 合同号,SUM(入库数量) AS 入库数量 from [A] GROUP BY 合同号)a
LEFT JOIN 
(select 合同号,SUM(出库数量) AS 出库数量 from [B] GROUP BY 合同号)b
ON
   a.合同号=b.合同号
WHERE
  ISNULL(a.入库数量,0)-ISNULL(b.出库数量,0)>0

----------------结果----------------------------
/*合同号
-----
cno-1
cno-2

(2 行受影响)
*/

热点排行
Bad Request.