日期:2014-05-20  浏览次数:20787 次

Sql难题,想了一天都没出来结果。。。
数据库中表:drm_drug
表中字段:药品,库房,公司,数量
注:
1.同一种药品最多存在2个公司,但可存在多个库房
2.同一库房、同一药品如果有2个公司,则会有两种情况:①两个公司的数量和为正 ②两个公司的数量和为负
3.如果为情况①,则又有两种情况:③两个公司的数量都为正 ④一个公司为正,另一个为负
求:按公司汇总统计每个公司的数量(查询结果字段:公司,数量)
    ⑴.如果出现情况④,则只取数量为正的公司,并且该条数据的数量为 这两个公司的数量和(正负相加后的数量)
    ⑵.如果出现情况②,则两条数据都不取
    ⑶.如果出现情况③,则两条数据都取

------解决方案--------------------
select c.公司, c.数量
from(
(Select 药品, sum(数量) as 数量
 from drm_drug
 group by 药品
 having sum(数量) > 0) a
inner join
(Select 药品,公司
 from drm_drug
 where 数量>0)b
on A.药品 = B.药品 
) c