在MS SQL Server中:如何统计状态一样的数据并减去另外一个状态的数据
pjtx_query字段:DKKBM,TXJE,PJZT 当PJZT=1时,将表中所有状态=1的数据加起来;并且减去其中状态=2的数据
(状态等于2的数据只有一条)
请写出具体的sql语句,谢谢!

解决方案 »

  1.   

    select sum(case when PJZT when 1 then DKKBM 
                              when 2 then -DKKBM end),
           sum(case when PJZT when 1 then TXJE
                              when 2 then -TXJE end)
    from  pjtx_query
    ?
      

  2.   

    create table pjtx_query(DKKBM int,TXJE int,PJZT int)
    insert pjtx_query
    select 1,1,1 union all
    select 2,2,1 union 
    select 3,3,1 union 
    select 1,1,2
    select sum(case  PJZT when 1 then DKKBM 
                              when 2 then -DKKBM end),
           sum(case PJZT when 1 then TXJE
                              when 2 then -TXJE end)
    from  pjtx_query
    drop table pjtx_query上面的多了个when
      

  3.   

    谢谢你的回复!
    上面:DKKBM改字段只是用来显示在查询结果中
          TXJE 时真正要统计的,统计条件根据PJZT来判断(状态为1,2)
      

  4.   

    当PJZT=1时,将查询结果中的状态=1的数据加起来;并且减去其中状态=2的数据(状态等于2的数据只有一条)。
      

  5.   

    这里还牵扯到数据类型转换:
    select DKKBM,SUM(CAST(TXJE AS DECIMAL(12,2))) AS VAL1
    FROM pjtx_query
    WHERE (PJZT = 1)
    GROUP BY DKKBM我是这么写的,但还是不对,你帮修改一下。谢谢!
      

  6.   


    select dkkbm,val1-(select txje from pjtx_query
    where PJZT = 2) from (select DKKBM,SUM(CAST(TXJE AS DECIMAL(12,2)))AS VAL1
    FROM pjtx_query
    WHERE (PJZT = 1)
    GROUP BY DKKBM
    )a?
      

  7.   

    TXJE 填写金额 varchar
    PJZT 评级状态 varchar
    也就是这两个关键的字段,其他几十个字段就暂时没有用到。
      

  8.   

    我不是说这个意思你这个select DKKBM,SUM(CAST(TXJE AS DECIMAL(12,2)))AS VAL1
    FROM pjtx_query
    WHERE (PJZT = 1)
    GROUP BY DKKBM只是没有满足减去PJZT = 2的?
      

  9.   

    select dkkbm,val1-(select txje from pjtx_query
    where PJZT = 2) from (select DKKBM,SUM(CAST(TXJE AS DECIMAL(12,2)))AS VAL1
    FROM pjtx_query
    WHERE (PJZT = 1)
    GROUP BY DKKBM
    )a
    这样?