有一张表,产品共有2个类别A和B,地区有很多产品地区  出售数量 产品类别
江苏         10       A
上海         20       B
山东         14       A
我想要的效果是按地区group by,出来的是各个地区A产品销售数量及B产品销售数量,如下面这样
             A        B
江苏         10       0
上海         0       20
山东         14       0为避免无效回复,先贴10分,如果解决再给40分。

解决方案 »

  1.   

    select 产品地区,sum(case when 产品类别='A' then 出售数量 else 0 end) as A,
        sum(case when 产品类别='B' then 出售数量 else 0 end) as B
    from tb
    group by 产品地区
      

  2.   


    select 产品地区 ,sum(case when 产品类别 = 'A' then 数量 else 0 end) as A,sum(case when 产品类别 = 'B' then 数量 else 0 end) as B
    from table group by 产品地区
      

  3.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(我是小F,向高手学习)
    -- Date    :2009-11-03 10:01:09
    -- Version:
    --      Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
    -- Nov 24 2008 13:01:59 
    -- Copyright (c) 1988-2005 Microsoft Corporation
    -- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
    --
    ----------------------------------------------------------------
    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    go 
    create table [tb]([产品地区] varchar(4),[出售数量] int,[产品类别] varchar(1))
    insert [tb]
    select '江苏',10,'A' union all
    select '上海',20,'B' union all
    select '山东',14,'A'
    --------------开始查询--------------------------
    select
        产品地区,
        sum(case when 产品类别='A' then 出售数量 else 0 end) as A,
        sum(case when 产品类别='B' then 出售数量 else 0 end) as B
    from 
        tb
    group by 
        产品地区
    ----------------结果----------------------------
    /* 产品地区 A           B
    ---- ----------- -----------
    江苏   10          0
    山东   14          0
    上海   0           20(3 行受影响)
    */