有一个表A记录如下
id              zje             shuliang       user ..
001          400                4               1111
001         -100              -1              2222
002          100                1               3333sql语句怎么写才可以让相同id只显示出相减后的记录,zje相减为'0'就不用显示,格式如下:
id             zje              shuliang        user
001          300                 3                1111
002          100                 1                3333

解决方案 »

  1.   

    select id , 
            sum(zje),
            sun(shuliang),
            min(user)
          from a 
         group by id你只要用合计函数就好了,但是user怎么处理要看你的需求了还有就是zje=0不显示   是指项目的还是记录不抽出啊?反正你修改下就可以用了
      

  2.   

    那表这样理解会容易些,某个user是 1111 给id为001开了shuliang 为4,zje是 400的单子,但是最后另一个user是2222的人给id为001的这张单减去shuliang 1,zje是100。那么我只想知到这个user是1111的人给id 001实际开出多少,就是这个id实际的领的数。最后是这样的:
    id             zje              shuliang        user
    001          300                 3                1111
    但是因为表里面因为操作这条记录的user是不同的人,因此查出来分别都显示出来了,单是我只想显示id 001最后加减后的数据,也就是上面的形式。你的方法实现不了哦
      

  3.   

    你觉得例子数据来说,这个SQL是可以解决的。
    但是你这个描述的话还是不能理解你对user的取值要求。比如我都是id 001的。
    user 1111 开出zje 100  数量200的单子
    user 1112 开出zje 200  数量200的单子
    user 1113 开出zje -200  数量-200的单子
    user 1115 开出zje 1200  数量2200的单子你最后显示的user是哪个?
    如果可以你可以加我QQ  356484834 
      

  4.   

    一般是 由一个user 开出,另一个user可能会进行删减操作,而不会进行增加。所以最后显示的是user1111的。
      

  5.   

    满不满足你要求
    WITH T AS
     (SELECT 001 ID, 400 ZJE, 4 SHULIANG, 2222 VUSER
        FROM DUAL
      UNION
      SELECT 001 ID, -100 ZJE, -1 SHULIANG, 1111 VUSER
        FROM DUAL
      UNION
      SELECT 002 ID, 100 ZJE, 1 SHULIANG, 3333 VUSER FROM DUAL)
    SELECT ID,
           SUM(ZJE),
           SUM(SHULIANG),
           MAX(NVL(DECODE(SIGN(ZJE), 1, VUSER, NULL), 0))
      FROM T
     GROUP BY ID
    HAVING SUM (ZJE) > 0