SQL语句分类汇总查询,急!感兴趣的进来看看!
一个药品明细表Medic_Detail,统计出当前库存量(当前数量=入库数量-出库数量-报损数量)有以下字段:药品编码数量出入库标识(0入库,1出库,2报损)medici...
一个药品明细表Medic_Detail,统计出当前库存量(当前数量=入库数量-出库数量-报损数量)
有以下字段:
药品编码 数量 出入库标识(0入库,1出库,2报损)
medicid num type
1 100 0
2 100 0
3 100 0
1 10 1
2 10 1
1 3 2
3 5 2
要求统计为以下结果:
药品编码 当前库存
1 83
2 90
3 95 展开
有以下字段:
药品编码 数量 出入库标识(0入库,1出库,2报损)
medicid num type
1 100 0
2 100 0
3 100 0
1 10 1
2 10 1
1 3 2
3 5 2
要求统计为以下结果:
药品编码 当前库存
1 83
2 90
3 95 展开
4个回答
展开全部
Medic_detail如果是SAS数据集的话,可以直接在SAS里实现你的要求:把下面的代码直接粘贴到SAS里即可,我已经验证过了。如果你的Medic_detail不在临时逻辑库里的话,只需在下面的第一条语句的Medic_detail前加上其所在库名即可。最后得到的数据集result,就是你要的结果^_^
proc sort data=medic_detail;
by medicid;
data result(keep=medicid net_num);
set medic_detail;
by medicid;
if type='1' or type='2' then num=0-num;
if first.medicid then net_num=0;
net_num+num;
if last.medicid;
run;
proc sort data=medic_detail;
by medicid;
data result(keep=medicid net_num);
set medic_detail;
by medicid;
if type='1' or type='2' then num=0-num;
if first.medicid then net_num=0;
net_num+num;
if last.medicid;
run;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在MS SQL2005中测试通过
--1.生成测试数据
select 1 as medicid, 100 as num, 0 as type into tmp_Test
union all select 2, 100, 0
union all select 3, 100, 0
union all select 1, 10 ,1
union all select 2, 10 ,1
union all select 1, 3, 2
union all select 3, 5, 2
--2.分类汇总
select medicid,sum(case when [type]=0 then num else -1*num end)
from tmp_test
group by medicid
--3.结果
1 87 --该条你的结果是错的,100-10-3=87
2 90
3 95
--1.生成测试数据
select 1 as medicid, 100 as num, 0 as type into tmp_Test
union all select 2, 100, 0
union all select 3, 100, 0
union all select 1, 10 ,1
union all select 2, 10 ,1
union all select 1, 3, 2
union all select 3, 5, 2
--2.分类汇总
select medicid,sum(case when [type]=0 then num else -1*num end)
from tmp_test
group by medicid
--3.结果
1 87 --该条你的结果是错的,100-10-3=87
2 90
3 95
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
自联接两次即可:
select a.medicid as 药品编码, a.num-b.num-c.num as 当前库存
from Medic_Detail a join Medic_Detail b on a.type=0 and b.type=1 and a.medicid=b.medicid join Medic_Detail c on a.type=0 and c.type=2 and a.medicid=c.medicid
---------------------------------
为了避免有库存而没有出库与报损,造成查询结果为空的情况,修改一下:
select a.medicid as 药品编码, a.num-isnull(b.num,0)-isnull(c.num,0) as 当前库存
from Medic_Detail a left join Medic_Detail b on a.type=0 and b.type=1 and a.medicid=b.medicid left join Medic_Detail c on a.type=0 and c.type=2 and a.medicid=c.medicid
select a.medicid as 药品编码, a.num-b.num-c.num as 当前库存
from Medic_Detail a join Medic_Detail b on a.type=0 and b.type=1 and a.medicid=b.medicid join Medic_Detail c on a.type=0 and c.type=2 and a.medicid=c.medicid
---------------------------------
为了避免有库存而没有出库与报损,造成查询结果为空的情况,修改一下:
select a.medicid as 药品编码, a.num-isnull(b.num,0)-isnull(c.num,0) as 当前库存
from Medic_Detail a left join Medic_Detail b on a.type=0 and b.type=1 and a.medicid=b.medicid left join Medic_Detail c on a.type=0 and c.type=2 and a.medicid=c.medicid
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select medicid "药品编码",a.num-b.num-c.num "当前库存"from (select * from T where type=0 ) a,(select * from T where type=1 ) b,(select * from T where type=2) c
where a.medicid=b.medicid and b.medicid=c.medicid
where a.medicid=b.medicid and b.medicid=c.medicid
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询