一个表tab1有三列,id(编号)、sort(类型),price(钱数),select* from tab1 返回的结果如下
id    sort   price
2      收      400
3       出     3000
4      收      5000

  
怎样用sql实现下列操作 使其返回结果如下
编号     收        出     利润
3       2000     300   1700

解决方案 »

  1.   

    select id 编号 ,
           sum(decode(sort,'收',price,0)) 收,
           sum(decode(sort,'出',price,0)) 收,
           sum(decode(sort,'出',price,0))-sum(decode(sort,'收',price,0)) 利润
    from tab1
    group by id
      

  2.   

    WITH a AS (SELECT '1' ID,'收' SORT, 2400 price FROM dual
              UNION
               SELECT '2' ID,'出' SORT, 400 price FROM dual
              UNION
               SELECT '3' ID,'收' SORT, 2000 price FROM dual
              UNION
               SELECT '2' ID,'收' SORT, 1400 price FROM dual
              UNION
               SELECT '1' ID,'出' SORT, 800 price FROM dual
              UNION
               SELECT '3' ID,'出' SORT, 300 price FROM dual
                 )
    SELECT ID 编号 , 
           SUM(DECODE(SORT,'收',price,0)) 收, 
           SUM(DECODE(SORT,'出',price,0)) 出, 
           SUM(DECODE(SORT,'收',price,0))-SUM(DECODE(SORT,'出',price,0)) 利润 
    FROM a 
    GROUP BY ID
      

  3.   

    SELECT ID 编号 ,  
           SUM(DECODE(SORT,'收',price,0)) 收,  
           SUM(DECODE(SORT,'出',price,0)) 出,  
           SUM(DECODE(SORT,'收',price,'出',-1*price,0) 利润  
    FROM a  
    GROUP BY ID
      

  4.   

    有知道如果用t_sql怎么实现吗?