我有一个表,结构是这样。
转出 单位 转入单位 笔数 金额
date(主) outid(主) inid(主) num amt
2009 1 2 1 500 为 1 单位 在2009年给 2 转出 1 笔 500元
2009 1 3 1 100 为 1 单位 在2009年给 3 转出 1 笔 100元
2009 1 4 3 200 为 1 单位 在2009年给 4 转出 3 笔 200元
2009 2 1 2 100 为 2 单位 在2009年给 1 转出 2 笔 100元
2009 4 1 1 100 为 4 单位 在2009年给 1 转出 1 笔 100元
2009 3 1 2 100 为 3 单位 在2009年给 1 转出 2 笔 100元
我需要查出结果如下,查询出2,3,4单位给1转出的,和由1转入的:单位 转出笔数 转出金额 转入笔数 转出金额
id date outnum outamt innum inamt
2 2009 2 200 1 500
3 2009 2 100 1 100
4 2009 1 100 3 200请问sql怎么写?
多谢。
转出 单位 转入单位 笔数 金额
date(主) outid(主) inid(主) num amt
2009 1 2 1 500 为 1 单位 在2009年给 2 转出 1 笔 500元
2009 1 3 1 100 为 1 单位 在2009年给 3 转出 1 笔 100元
2009 1 4 3 200 为 1 单位 在2009年给 4 转出 3 笔 200元
2009 2 1 2 100 为 2 单位 在2009年给 1 转出 2 笔 100元
2009 4 1 1 100 为 4 单位 在2009年给 1 转出 1 笔 100元
2009 3 1 2 100 为 3 单位 在2009年给 1 转出 2 笔 100元
我需要查出结果如下,查询出2,3,4单位给1转出的,和由1转入的:单位 转出笔数 转出金额 转入笔数 转出金额
id date outnum outamt innum inamt
2 2009 2 200 1 500
3 2009 2 100 1 100
4 2009 1 100 3 200请问sql怎么写?
多谢。
select outid as id,date,sum(num),sum(amt)
from tb
where outid in (2,3,4) and inid =1]
group by outid,date
(select "date",outid,inid,num,amt from tb where outid in (2,3,4) and inid = 1) a,
(select "date",outid,inid,num,amt from tb where inid in (2,3,4) and outid = 1) b
where a."date"=b."date" and a.outid = b.inid and a.inid = b.outid;
然后通过其他单位的列表,统计1给其它单位转了多少,其它单位给1转了多少。存的时候,从那转出,转出单位就是outid,转入到哪里,转入的单位就是inid。
select '2009' date1,1 outid,2 inid,1 num,500 amt from dual
union all
select '2009' date1,1 outid,3 inid,1 num,100 amt from dual
union all
select '2009' date1,1 outid,4 inid,3 num,200 amt from dual
union all
select '2009' date1,2 outid,1 inid,2 num,100 amt from dual
union all
select '2009' date1,4 outid,1 inid,1 num,100 amt from dual
union all
select '2009' date1,3 outid,1 inid,2 num,100 amt from dual
)
select a.date1,outnum,outamt,innum,inamt from
(select outid, date1,sum(outid) outnum,sum(amt) outamt from temp group by date1,outid) a,
(select inid,date1,sum(inid) innum,sum(amt) inamt from temp group by date1,inid) b
where a.outid = b.inid and a.date1 = b.date1
select '2009' date1,1 outid,2 inid,1 num,500 amt from dual
union all
select '2009' date1,1 outid,3 inid,1 num,100 amt from dual
union all
select '2009' date1,1 outid,4 inid,3 num,200 amt from dual
union all
select '2009' date1,2 outid,1 inid,2 num,100 amt from dual
union all
select '2009' date1,4 outid,1 inid,1 num,100 amt from dual
union all
select '2009' date1,3 outid,1 inid,2 num,100 amt from dual
)
select a.date1,outnum,outamt,innum,inamt from
(select outid, date1,sum(outid) outnum,sum(amt) outamt from temp group by date1,outid) a,
(select inid,date1,sum(inid) innum,sum(amt) inamt from temp group by date1,inid) b
where a.outid = b.inid and a.date1 = b.date1 and a.outid=1上面是全部的,这个是1转出的和转进的