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

关于同一个表的两类不同数据相减的问题---在线等啊。求求高手了
表内容:
tank_id oil_id Oil_Mass Tank_status
 101 1 100 0
 101 1 500 1
 102 1 100 0
 102 1 400 1
 103 2 50 0
 103 2 200 1
 104 3 100 0
 104 3 300 1

说明:
tank_id 与 oil_id 为主键。Tank_status字段中“0”与“1”为一组相关数据

完成功能:
查询Tank_status为“1”的减去Tank_status为“0”的所有记录。

请问如何实现。

谢谢在
在线等


------解决方案--------------------


---这样?

select 
tank_id, 
oil_id,
sum(case when Tank_status=1 then Oil_Mass else Oil_Mass * (-1) end) as 合计
from 表
group by tank_id, oil_id
------解决方案--------------------
select
isnull(a.tank_id,b.tank_id) as tank_id ,
isnull(a.oil_id ,b.oil_id ) as oil_id ,
isnull(a.Oil_Mass,0)-isnull(b.Oil_Mass,0) as Oil_Mass
from
(select * from 表 where Tank_status=1) a
full outer join
(select * from 表 where Tank_status=0) b
on
a.tank_id=b.tank_id and a.oil_id=b.oil_id
order by
tank_id,oil_id
------解决方案--------------------


create table T (tank_id int, oil_id int, Oil_Mass int,Tank_status int)


insert into T select 101, 1, 100, 0 
insert into T select 101, 1, 500, 1 
insert into T select 102, 1, 100, 0 
insert into T select 102, 1, 400, 1 
insert into T select 103, 2, 50, 0 
insert into T select 103, 2, 200, 1 
insert into T select 104, 3, 100, 0 
insert into T select 104, 3, 300, 1 

--你要的SQL语句
select 
tank_id, 
oil_id,
sum(case when Tank_status=1 then Oil_Mass else Oil_Mass * (-1) end) as 合计
from T
group by tank_id, oil_id


drop table T


/*

--结果

tank_id oil_id 合计
---------------------------------------
101 1 400
102 1 300
103 2 150
104 3 200


*/
------解决方案--------------------
select tank_id,oil_id,Oil_Mass=sum(case Tank_status when 1 then Oil_Mass else - Oil_Mass end) from tb group by tank_id,oil_id
------解决方案--------------------
create table tb(tank_id int,oil_id int,Oil_Mass int,Tank_status int)
insert into tb values(101, 1, 100, 0 )
insert into tb values(101, 1, 500, 1 )
insert into tb values(102, 1, 100, 0 )
insert into tb values(102, 1, 400, 1 )
insert into tb values(103, 2, 50 , 0 )
insert into tb values(103, 2, 200, 1 )
insert into tb values(104, 3, 100, 0 )
insert into tb values(104, 3, 300, 1 )
select tank_id,oil_id,Oil_Mass=sum(case Tank_status when 1 then Oil_Mass else - Oil_Mass end) from tb group by tank_id,oil_id
drop table tb
/*
tank_id oil_id Oil_Mass
----------- ----------- ----------- 
101 1 400
102 1 300
103 2 150
104 3 200
*/
------解决方案--------------------

create table T (tank_id int, oil_id int, Oil_Mass int,Tank_status int)