请高手过招。高难度的SQL语句。(150分)

  • 主题发起人 主题发起人 qq_tom1520
  • 开始时间 开始时间
Q

qq_tom1520

Unregistered / Unconfirmed
GUEST, unregistred user!
请高手看以下表格:
表1-1:
部门 领料单号 ....
A车间 L01
B车间 L02
C车间 L03
C车间 L04
A车间 L05
B车间 L06
表1-2:
领料单号 货品编码 领料数量 ....
L01 A货品 100
L02 B货品 10
L03 A货品 200
L04 B货品 15
L05 A货品 200
L06 B货品 200

表2-1:
部门 退料单号 ....
A车间 T01
B车间 T02
C车间 T03
A车间 T04
B车间 T05
表2-2:
退料单号 货品编码 退料数量 ....
T01 A货品 50
T02 B货品 10
T03 A货品 10
T04 A货品 20
T05 B货品 15

我想要的结果表:
部门 货品编码 领料数量 退料数量 合计数量
A车间 A货品 300 70 230
B车间 B货品 210 25 185
C车间 A货品 200 10 190
C车间 B货品 15 0 15
请高手指点,用什么语句能把以上的结果表,统计出来,小弟多谢各位了。
 
不要用“高难度”啦,感觉不是很难哦~
用几个嵌套的查询即可完成
一个个完成:
r1:
select 表1-1.部门,表1-2.货品编码,表1-2.领料数量
from 表1-1,表1-2
where 表1-1.领料单号=表2-1.领料单号
r2:
select 表2-1.部门,表2-2.货品编码,表2-2.领料数量
from 表2-1,表2-2
where 表2-1.退料单号=表2-2.退料单号
select t1.部门, t1.货品编码, t1.领料数量, t2.退料数量, t1.领料数量-t2.退料数量 as
合计数量from r1 as t1, r2 as t2
where t1.部门=t2.部门
and t1.货品编码=t2.货品编码
知道结果不是很难,关键是要知道为什么这么写
 
楼上的写法会少数据的,你想一想.最后的链接会把一部分数据过滤掉.
 
呵呵,没有仔细看。
原来料单和名称不是一一对应的
修改下即可,用group
 
r1:
select 表1-1.部门,表1-2.货品编码,sum(表1-2.领料数量)
from 表1-1,表1-2
where 表1-1.领料单号=表2-1.领料单号
group by 表1-1.部门,表1-2.货品编码
r2类似
 
如果是常用的话,把中间过程建立一个视图,
create view vw_sta
as
select A.部门 as 部门,B.货品编码 as 货品编码,领料数量 as 数量 ,0 as 状态 from 表1-1 A,表1-2 B where A.领料单号=b.领料单号
union all
select C.部门 as 部门,D.货品编码 as 货品编码,D.退料数量 as 数量 ,1 as 状态 from 表2-1 C,表2-2 D where C.退料单号=D.退料单号

下一步再跟据视图查询
select 部门,货品编码,
sum(case when 状态=0 then
数量 else
0 end) as 领料数量,
sum(case when 状态=1 then
数量 else
0 end) as 退料数量,
sum(case when 状态=0 then
数量 else
0 end) -
sum(case when 状态=1 then
数量 else
0 end) as 剩余数量
from vw_sta group by 部门,货品编码 order by 部门,货品编码
 
good,
也你老兄在,我干吗还费这个劲啊,呵呵[:D]
 
最近行列转换写的熟了,呵呵
 
看见了,还没有看懂呢
记得以前看过SqlServer的一个例子,类似于游标的,很容易就做出来了
但可惜找不到了
 
我要以上方法, 运行结果不对,
请看清楚:
部门 货品编码 领料数量 退料数量 合计数量
A车间 A货品 300 70 230
B车间 B货品 210 25 185
C车间 A货品 200 10 190
C车间 B货品 15 0 15
 
帮定,关注学习。。。。。。。。。。。
 
我按照 hityou
提供的方法统计不出来,
按照 MrMengyi 提供的方法,统计出来只有一个。
但您要看清楚:
部门 货品编码 领料数量 退料数量 合计数量
A车间 A货品 300 70 230
B车间 B货品 210 25 185
C车间 A货品 200 10 190
C车间 B货品 15 0 15
不是一般的结果.谢谢,能提供明白一点的信息。
 
我不知道你该什么了,我统计了,结果就是那个.
create table A11(部门 varchar(50),领料单号 varchar(50))
insert into A11 select 'A车间','L01'
insert into A11 select 'B车间','L02'
insert into A11 select 'C车间','L03'
insert into A11 select 'C车间','L04'
insert into A11 select 'A车间','L05'
insert into A11 select 'B车间','L06'
create table A12(领料单号 varchar(50),货品编码 varchar(50),领料数量 int)
insert into A12 select 'L01','A货品',100
insert into A12 select 'L02','B货品',10
insert into A12 select 'L03','A货品',200
insert into A12 select 'L04','B货品',15
insert into A12 select 'L05','A货品',200
insert into A12 select 'L06','B货品',200
create table B11(部门 varchar(50),退料单号 varchar(50))
insert into B11 select 'A车间','T01'
insert into B11 select 'B车间','T02'
insert into B11 select 'C车间','T03'
insert into B11 select 'A车间','T04'
insert into B11 select 'B车间','T05'
create table B12(退料单号 varchar(50),货品编码 varchar(50),退料数量 int)
insert into B12 select 'T01','A货品',50
insert into B12 select 'T02','B货品',10
insert into B12 select 'T03','A货品',10
insert into B12 select 'T04','A货品',20
insert into B12 select 'T05','B货品',15
create view vw_sta
as
select A.部门 as 部门,B.货品编码 as 货品编码,B.领料数量 as 数量 ,0 as 状态 from A11 A,A12 B where A.领料单号=b.领料单号
union all
select C.部门 as 部门,D.货品编码 as 货品编码,D.退料数量 as 数量 ,1 as 状态 from B11 C,B12 D where C.退料单号=D.退料单号

select 部门,货品编码,
sum(case when 状态=0 then
数量 else
0 end) as 领料数量,
sum(case when 状态=1 then
数量 else
0 end) as 退料数量,
sum(case when 状态=0 then
数量 else
0 end) -
sum(case when 状态=1 then
数量 else
0 end) as 剩余数量
from vw_sta group by 部门,货品编码 order by 部门,货品编码
结果
A车间 A货品 300 70 230
B车间 B货品 210 25 185
C车间 A货品 200 10 190
C车间 B货品 15 0 15
 
辛苦各位高手了,
问题已解决,我用的是另外一种办法/..
 
后退
顶部