select 市场,产品型号,sum(购买数量) as 合计数量 from xiaoliang
group by 市场,产品型号

解决方案 »

  1.   

    select * from(
       select 市场,
              sum(case 产品 when '产品1' then 购买数量 else 0 end) as 产品1,
              sum(case 产品 when '产品2' then 购买数量 else 0 end) as 产品2,
              sum(case 产品 when '产品3' then 购买数量 else 0 end) as 产品3
            from xiaoliang
       group by 市场) b      
      

  2.   

    select 市场,
              sum(case 产品 when '产品1' then 购买数量 else 0 end) as 产品1,
              sum(case 产品 when '产品2' then 购买数量 else 0 end) as 产品2,
              sum(case 产品 when '产品3' then 购买数量 else 0 end) as 产品3
            from xiaoliang
       group by 市场
      

  3.   


    select 市场
      ,sum(case 产品型号 when '产品1' then 购买数量 end) as 产品1
      ,sum(case 产品型号 when '产品2' then 购买数量 end) as 产品2
      ,sum(case 产品型号 when '产品3' then 购买数量 end) as 产品3
    from xiaoliang
    group by 市场
      

  4.   

    如果你的产品不只三种,就用动态生成SQL语句的方法:declare @sql varchar(8000)
    set @sql='select 市场'
    select @sql=@sql+char(13)
      +',sum(case 产品型号 when '''+产品型号+''' then 购买数量 end) as ['+产品型号+']'
    from (select distinct 产品型号 from xiaoliang) a
    set @sql=@sql+char(13)+'from xiaoliang group by 市场'--执行动态生成的SQL语句 
    exec(@sql)
      

  5.   

    declare @xiaoliang table(市场 nvarchar(20),产品 nvarchar(20),购买数量 int)insert into @xiaoliang(市场,产品,购买数量)
              select '市场1','产品1',10
              union select '市场2','产品1',30
              union select '市场2','产品2',30
              union select '市场1','产品3',30
              union select '市场2','产品2',40
              union select '市场1','产品2',30
              union select '市场1','产品1',30 
    select * from(
       select 市场,
              sum(case 产品 when '产品1' then 购买数量 else 0 end) as 产品1,
              sum(case 产品 when '产品2' then 购买数量 else 0 end) as 产品2,
              sum(case 产品 when '产品3' then 购买数量 else 0 end) as 产品3
            from @xiaoliang
       group by 市场) b   
    我发现一个怪问题,以上数据可以得到正确的答案,可是,当我将union select '市场2','产品2',40 改为union select '市场2','产品2',30的时候,结果却是这样的:
    市场1 40 30 30
    市场2 30 30 0
    真是怪了!!!
      

  6.   

    不怪。
    union将两条语句
    给合成一条了。两条语句不是重复了吗?
      

  7.   

    select '市场2','产品2',30
    union select '市场2','产品2',30
    插入的时候被union给并成一条
    '市场2','产品2',30
    只插入一条.
      

  8.   

    1.使用下列语句产生按市场及产品型号分组统计的表:
    select 市场,产品型号,合计数量=sum(购买数量) from xiaoliang group by 市场,产品型号
    2.使用水晶报表的交叉报表或Access2000的透视表或Excel的透视表或者用Microsoft SQL Server 2000 Analysis Services 功能都可以形成你的最终表,如果要在SqlServer中硬性生成这种表是勉为其难了。