急求SQL查询的复杂语句!!

bobyang1681 2014-07-27 10:20:58
有5个表如下:

表: T1 (仓库名称)
字段 ID CKMC
4 报废品
3 不可重工品
2 可重工品
1 良品

表 T2 (素材初始库存)
字段 sclh(素材编号) ckmc sl
1B3394000-600-GA 良品 500
1B3394000-600-GA 可重工品 800
1B3394000-600-GA 不可重工品 600
1B3394000-600-GA 报废品 400

表 T3 (成品初始库存)
字段 khmc sclh (素材编号) cplh(成品编号) ckmc ys sl
中信 1B3394000-600-GA 1B089G100-600-GA 良品 银色 800
中信 1B3394000-600-GA 1B089G100-600-GA 可重工品 银色 200
中信 1B3394000-600-GA 1B089G100-600-GA 不可重工品 银色 100
中信 1B3394000-600-GA 1B089G100-600-GA 报废品 银色 100
中信 1B3394000-600-GA 1B089G100-600-GA 良品 灰色 100

表 T4 (入库单)
字段 khmc wlfl(分类) wllh(有素材号也有成品号) ckmc ys sl
中信 成品 1B089G100-600-GA 良品 银色 1000
中信 素材 1B3394000-600-GA 可重工品 300

表 T5 (出库单)
字段 khmc wlfl wllh ckmc ys sl
中信 成品 1B089G100-600-GA 良品 银色 600
中信 素材 1B3394000-600-GA 可重工品 200
中信 成品 1B089G100-600-GA 良品 灰色 50

要求:查询 库存结余=(入库+初始库存-出库)
结果如下:

表 KCJY (库存结余)
字段 khmc ckmc wlfl wllh ys kcjy
中信 良品 素材 1B3394000-600-GA 500 解释(初始500)
中信 可重工品 素材 1B3394000-600-GA 900 解释(初始800+入库300-出库200)
中信 不可重工品 素材 1B3394000-600-GA 600 解释(初始500)
中信 报废 素材 1B3394000-600-GA 400 解释(初始400)
中信 良品 成品 1B089G100-600-GA 500 解释(初始500)
中信 可重工品 成品 1B089G100-600-GA 900 解释(初始800+入库300-出库200)
中信 不可重工品 成品 1B089G100-600-GA 600 解释(初始500)
中信 报废 成品 1B089G100-600-GA 400 解释(初始400)
中信 良品 成品 1B089G100-600-GA 灰色 50 解释(初始100-出库50)
...全文
147 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
--小F-- 2014-07-28
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author  :fredrickhu(小F,向高手学习)
-- Date    :2014-07-28 00:25:16
-- Version:
--      Microsoft SQL Server 2012 - 11.0.2100.60 (Intel X86) 
--	Feb 10 2012 19:13:17 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition: Core-based Licensing on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[T1]
if object_id('[T1]') is not null drop table [T1]
go 
create table [T1]([ID] int,[CKMC] varchar(10))
insert [T1]
select 4,'报废品' union all
select 3,'不可重工品' union all
select 2,'可重工品' union all
select 1,'良品'
--> 测试数据:[T2]
if object_id('[T2]') is not null drop table [T2]
go 
create table [T2]([sclh] varchar(16),[ckmc] varchar(10),[sl] int)
insert [T2]
select '1B3394000-600-GA','良品',500 union all
select '1B3394000-600-GA','可重工品',800 union all
select '1B3394000-600-GA','不可重工品',600 union all
select '1B3394000-600-GA','报废品',400
--> 测试数据:[T3]
if object_id('[T3]') is not null drop table [T3]
go 
create table [T3]([khmc] varchar(4),[sclh] varchar(16),[cplh] varchar(16),[ckmc] varchar(10),[ys] varchar(4),[sl] int)
insert [T3]
select '中信','1B3394000-600-GA','1B089G100-600-GA','良品','银色',800 union all
select '中信','1B3394000-600-GA','1B089G100-600-GA','可重工品','银色',200 union all
select '中信','1B3394000-600-GA','1B089G100-600-GA','不可重工品','银色',100 union all
select '中信','1B3394000-600-GA','1B089G100-600-GA','报废品','银色',100 union all
select '中信','1B3394000-600-GA','1B089G100-600-GA','良品','灰色',100
--> 测试数据:[T4]
if object_id('[T4]') is not null drop table [T4]
go 
create table [T4]([khmc] varchar(4),[wlfl] varchar(4),[wllh] varchar(16),[ckmc] varchar(8),[ys] varchar(4),[sl] int)
insert [T4]
select '中信','成品','1B089G100-600-GA','良品','银色',1000 union all
select '中信','素材','1B3394000-600-GA','可重工品',null,300
--> 测试数据:[T5]
if object_id('[T5]') is not null drop table [T5]
go 
create table [T5]([khmc] varchar(4),[wlfl] varchar(4),[wllh] varchar(16),[ckmc] varchar(8),[ys] varchar(4),[sl] int)
insert [T5]
select '中信','成品','1B089G100-600-GA','良品','银色',600 union all
select '中信','素材','1B3394000-600-GA','可重工品',null,200 union all
select '中信','成品','1B089G100-600-GA','良品','灰色',50
--------------开始查询--------------------------

--select * from [T1]
--select * from [T2]
--select * from [T3]
--select * from [T4]
--select * from [T5]

select b.khmc,a.ckmc,b.wlfl,b.wllh,b.ys,a.sl  from t2  as a cross join (select * from t4 where wlfl='素材')as b

union all

select b.khmc,a.ckmc,b.wlfl,b.wllh,a.ys,a.sl  from t3  as a cross join (select * from t4 where wlfl='成品')as b

----------------结果----------------------------
/* khmc ckmc       wlfl wllh             ys   sl
---- ---------- ---- ---------------- ---- -----------
中信   良品         素材   1B3394000-600-GA NULL 500
中信   可重工品       素材   1B3394000-600-GA NULL 800
中信   不可重工品      素材   1B3394000-600-GA NULL 600
中信   报废品        素材   1B3394000-600-GA NULL 400
中信   良品         成品   1B089G100-600-GA 银色   800
中信   可重工品       成品   1B089G100-600-GA 银色   200
中信   不可重工品      成品   1B089G100-600-GA 银色   100
中信   报废品        成品   1B089G100-600-GA 银色   100
中信   良品         成品   1B089G100-600-GA 灰色   100

(9 行受影响)

*/
--小F-- 2014-07-28
  • 打赏
  • 举报
回复
先构造个数据在这里 明天来写。
--小F-- 2014-07-28
  • 打赏
  • 举报
回复
楼主的结果有点问题吧?
bobyang1681 2014-07-28
  • 打赏
  • 举报
回复
结果还少了一条。 中信 良品 成品 1B089G100-600-GA 银色 1600 解释(初始1000+入库800-出库200)
bobyang1681 2014-07-28
  • 打赏
  • 举报
回复
还有,可能,没有想到的问题, 不管 素材 还是成品 初始库存,有没有数据,入库 有没有数据,只要有一个地方有,就要显示出来,2个地方有,就要加起来。
bobyang1681 2014-07-28
  • 打赏
  • 举报
回复
结果应该,没有问题。 疑问在什么地方? 你的,回答,是还没有,计算 出入库的是吧?

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧