比如一条数据包括的列 “属性” 和 “内容” 字段。
假设数据库内容是: ID 属性 内容  
1 AA 100
2 AA 50
3 BB 60
4 BB 20求 “属性” = AA 字段的“内容”总和;“属性” = BB 字段“内容”的总和;然后为AA的和 - 为BB的和。

解决方案 »

  1.   

    select sum([sum])
    from (
    select sum(内容) [sum]
    from 表
    where 属性='aa'
    union 
    select -1*sum(内容) [sum]
     from 表
     where 属性='bb'
    ) a
      

  2.   


    select (select sum(内容) from table where 属性='AA')-(select sum(内容) from table where 属性='BB')
      

  3.   

    -->测试数据
    if object_id('[tb]') is not null drop table [tb]
    go
    create table [tb]([ID] int,[属性] varchar(2),[内容] int)
    insert [tb]
    select 1,'AA',100 union all
    select 2,'AA',50 union all
    select 3,'BB',60 union all
    select 4,'BB',20
    go-->查询
    SELECT 
      SUM(CASE WHEN 属性='AA' THEN 内容 ELSE 0 END) AS [AA和],
      SUM(CASE WHEN 属性='BB' THEN 内容 ELSE 0 END) AS [BB和],
      SUM(CASE WHEN 属性='AA' THEN 内容 WHEN 属性='BB' THEN -内容 ELSE 0 END) AS [AA和-BB和]
    FROM
      TB-->查询结果
    /**
    AA和         BB和         AA和-BB和
    ----------- ----------- -----------
    150         80          70(1 行受影响)
    **/
      

  4.   

    楼上几位把三种写法都写了!
    SELECT 
      SUM(CASE WHEN 属性='AA' THEN 内容 ELSE 0 END) AS [AA和],
      SUM(CASE WHEN 属性='BB' THEN 内容 ELSE 0 END) AS [BB和],
      SUM(CASE WHEN 属性='AA' THEN 内容 WHEN 属性='BB' THEN -1*内容 ELSE 0 END) AS [AA和-BB和]
    FROM
      TB顶树哥!!
      

  5.   


    SELECT 
      SUM(CASE WHEN 属性='AA' THEN 内容 ELSE 0 END) AS [AA和],
      SUM(CASE WHEN 属性='BB' THEN 内容 ELSE 0 END) AS [BB和],
      SUM(CASE WHEN 属性='AA' THEN 内容 WHEN 属性='BB' THEN -1*内容 ELSE 0 END) AS [AA和-BB和]
    FROM
      TB