日期:2014-05-18  浏览次数:20645 次

求查询表里对应数量汇总合计相减的明细表
MFPOS   表有字段为:
OS_ID,       CLS_ID,     BIL_TYPE

SO     F         01
SO     F         01
SO                   F         02
SO                   F                     01
SO                   F                     02
.....

TFPOS表有字段为:
OS_ID,       PRD_NO,             QTY

SO CP0245     5000.00
SO CP0245     2000.00
SO CP0245     9000.00
SO CP0241     1000.00
SO CP0241     900.00
.....


我想求出两个表MFPOS.OS_ID=TFPOS.OS_ID= 'SO '   并   MFPOS.CLS_ID= 'F '
且MFPOS.BIL_TYPE都等于 '02 '对应TFPOS.PRD_NO的TFPOS.QTY总合计减去
MFPOS.BIL_TYPE都等于 '01 '对应TFPOS.PRD_NO的TFPOS.QTY总合计大于0的数值;

另一条件:按TFPOS.PRD_NO可查询;

显示为:

PRD_NO,     QTY1,   QTY2,   QTY3
CP0245       9000     7000     2000
......    

注:QTY1为MFPOS.BIL_TYPE都等于 '02 '的PRD_NO总合计
        QTY2为MFPOS.BIL_TYPE都等于 '01 '的PRD_NO总合计
        QTY3=QTY1-QTY2

上面的CP0241这个货号因为对应 '02 '的合计减去 '01 '的合计少于零(900-1000=-100)所以没有显示出来

谢谢哪大虾帮忙!


------解决方案--------------------
貌似有点问题~
------解决方案--------------------
create table MFPOS(OS_ID varchar(10),OS_NO varchar(10),CLS_ID varchar(10),BIL_TYPE varchar(10))
insert into MFPOS select 'SO ', 'SO71080001 ', 'F ', '01 '
insert into MFPOS select 'SO ', 'SO71080002 ', 'F ', '01 '
insert into MFPOS select 'SO ', 'SO71080003 ', 'F ', '02 '
insert into MFPOS select 'SO ', 'SO71090001 ', 'F ', '01 '
insert into MFPOS select 'SO ', 'SO71090002 ', 'F ', '02 '
create table TFPOS(OS_ID varchar(10),OS_NO varchar(10),PRD_NO varchar(10),QTY numeric(8,2))
insert into TFPOS select 'SO ', 'SO71080001 ', 'CP0245 ',5000.00
insert into TFPOS select 'SO ', 'SO71080002 ', 'CP0245 ',2000.00
insert into TFPOS select 'SO ', 'SO71080003 ', 'CP0245 ',9000.00
insert into TFPOS select 'SO ', 'SO71090001 ', 'CP0241 ',1000.00
insert into TFPOS select 'SO ', 'SO71090002 ', 'CP0241 ',900.00
go


select
b.PRD_NO,
QTY1=sum(case a.BIL_TYPE when '02 ' then b.QTY else 0 end),
QTY2=sum(case a.BIL_TYPE when '01 ' then b.QTY else 0 end),
QTY3=sum(case a.BIL_TYPE when '02 ' then b.QTY else -b.QTY end)
from
MFPOS a,TFPOS b
where
a.OS_ID=b.OS_ID and a.OS_NO=b.OS_NO and a.CLS_ID= 'F '
group by
b.PRD_NO
having
sum(case a.BIL_TYPE when '02 ' then b.QTY else -b.QTY end)> =0
go


/*
PRD_NO QTY1 QTY2 QTY3
---------- ----------- ----------- -----------
CP0245 9000.00 7000.00 2000.00
*/

drop ta