数据格式如下:月份 产品 产品出售个数 产品出售金额 产品结算金额
201101 水笔 8 80 70
201101 圆珠笔 6 40 35
201101 钢笔 10 90 88
201102 水笔 10 90 60
201103 圆珠笔 7 60 38
201104 钢笔 13 110 109需要将该数据格式转为
月份 水笔出售个数 圆珠笔出售个数 钢笔出售个数 产品出售总金额 产品出售总结算金额
201101 8 6 10 210 193
201102 10 7 13 260 207SQL语句该如何编写?谢谢!

解决方案 »

  1.   

    select 月份, max( case when 产品='水笔' then 产品出售个数 end)[水笔出售个数],
    max( case when 产品='水笔' then 产品出售个数 end)[圆珠笔出售个数],
    max( case when 产品='水笔' then 产品出售个数 end)[钢笔出售个数],
    sum(产品出售金额) [产品出售总金额],sum(产品结算金额) [产品出售总结算金额]
    from tb group by 月份
      

  2.   

    不明白lz的具体意思,猜测了两种
    use tempdb;
    /*
    create table tb
    (
    月份 nvarchar(10) not null,
    产品 nvarchar(10) not null,
    产品出售个数 int not null,
    产品出售金额 int not null,
    产品结算金额 int not null
    );
    insert into tb([月份],[产品],[产品出售个数],[产品出售金额],[产品结算金额])
    values
    ('201101','水笔',8,80,70),
    ('201101','圆珠笔',6,40,35),
    ('201101','钢笔',10,90,88),
    ('201102','水笔',10,90,60),
    ('201103','圆珠笔',7,60,38),
    ('201104','钢笔',13,110,109);
    */
    --语句1
    select tb.[月份],
    SUM(case when tb.[产品] = '水笔' then tb.[产品出售个数] else 0 end) as [水笔出售个数],
    SUM(case when tb.[产品] = '圆珠笔' then tb.[产品出售个数] else 0 end) as [圆珠笔出售个数],
    SUM(case when tb.[产品] = '钢笔' then tb.[产品出售个数] else 0 end) as [钢笔出售个数],
    SUM(tb.[产品出售金额]) as [产品出售总金额],
    SUM(tb.[产品结算金额]) as [产品出售总结算金额]
    from tb
    group by tb.[月份];
    --语句2
    select t.[月份],
    SUM(case when t.[产品] = '水笔' then t.[产品出售个数] else 0 end) as [水笔出售个数],
    SUM(case when t.[产品] = '圆珠笔' then t.[产品出售个数] else 0 end) as [圆珠笔出售个数],
    SUM(case when t.[产品] = '钢笔' then t.[产品出售个数] else 0 end) as [钢笔出售个数],
    SUM(t.[产品出售金额]) as [产品出售总金额],
    SUM(t.[产品结算金额]) as [产品出售总结算金额]
    from 
    (
    select 
    case when tb.月份 <> '201101' then STUFF(tb.月份,6,1,'2') else tb.月份 end as [月份],
    tb.产品,tb.产品出售个数,tb.产品出售金额,tb.产品结算金额
    from tb
    ) as t
    group by t.[月份];
      

  3.   

    select
     月份, 
     max( case when 产品='水笔' then 产品出售个数 end) as [水笔出售个数],
     max( case when 产品='水笔' then 产品出售个数 end) as [圆珠笔出售个数],
     max( case when 产品='水笔' then 产品出售个数 end) as[钢笔出售个数],
     sum(产品出售金额) as [产品出售总金额],
     sum(产品结算金额) as [产品出售总结算金额]
    from
     tb 
    group by
     月份