我有一个表,结构是这样。
            转出 单位    转入单位    笔数   金额
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怎么写?
多谢。

解决方案 »

  1.   


    select outid as id,date,sum(num),sum(amt)
    from tb
    where outid in (2,3,4) and inid =1]
    group by outid,date
      

  2.   

    select a.outid id,a."date",a.num outnum,a.amt outamt,b.num innum,b.amt inamt from 
    (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;
      

  3.   

    数据就是1转出给其它单位,其它单位转出给1
    然后通过其他单位的列表,统计1给其它单位转了多少,其它单位给1转了多少。存的时候,从那转出,转出单位就是outid,转入到哪里,转入的单位就是inid。
      

  4.   

    with temp as(
              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
      

  5.   

    with temp as( 
              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转出的和转进的