有个表tlb_count(tlb_name(商品名称),tlb_color(商品颜色),tlb_qty(商品数量))
  tlb_name  tlb_color  tlb_qty
  name1     蓝色        100
  name2     红色        458
  name1     蓝色        256
  name1     红色        255
  name2     蓝色        723
  name2     蓝色        156
  ...
请用一句SQL语句进行下面功能的统计:
a.按照商品名称分类,统计红色比蓝色多的商品名称及数量差额.(商品名称,数量差额)
b.按照商品名称分类进行统计(商品名称,红色数量,蓝色数量).

解决方案 »

  1.   

    ----创建测试数据
    declare @tlb_count table(tlb_name varchar(10),tlb_color varchar(10),tlb_qty int)
    insert @tlb_count
    select  'name1',     '蓝色',        100 union all
    select  'name2',     '红色',        458 union all
    select  'name1',     '蓝色',        256 union all
    select  'name1',     '红色',        255 union all
    select  'name2',     '蓝色',        723 union all
    select  'name2',     '蓝色',        156----1.
    select tlb_name,数量差额 = 
    sum(case tlb_color when '红色' then tlb_qty else -tlb_qty end)
    from @tlb_count group by tlb_name 
    having sum(case tlb_color when '红色' then tlb_qty else -tlb_qty end) > 0----2.
    select tlb_name,
    红色数量 = 
    sum(case tlb_color when '红色' then tlb_qty else 0 end),
    蓝色数量 = 
    sum(case tlb_color when '蓝色' then tlb_qty else 0 end)
    from @tlb_count group by tlb_name /*结果
    tlb_name   数量差额        
    ---------- ----------- (所影响的行数为 0 行)tlb_name   红色数量        蓝色数量        
    ---------- ----------- ----------- 
    name1              255         356 
    name2              458         879 
    (所影响的行数为 2 行)
    */