现在有数据如下:
日期 订单属性 订单数量
2010-6-21 第10单以上 2249
2010-6-21 第2~3单 5845
2010-6-21 第8~9单 744
2010-6-21 第1单 6997
2010-6-21 第4~5单 2451
2010-6-21 第6~7单 1281
2010-6-22 第10单以上 2456
2010-6-22 第2~3单 6210
2010-6-22 第8~9单 841
2010-6-22 第1单 7502
2010-6-22 第4~5单 2659
2010-6-22 第6~7单 1415现在想得出一个关于每天 各订单属性占比分布的数据,所以 不知道pivot有没有这样的功能,或者 有没有其他的解决方法
想要得出的结果:订单属性 2010-6-21 2010-6-22
第10单以上 11.49% 11.65%
第1单 35.76% 35.58%
第2~3单 29.87% 29.46%
第4~5单 12.53% 12.61%
第6~7单 6.55% 6.71%
第8~9单 3.80% 3.99%

解决方案 »

  1.   

    ---生成数据表---create table #xi(row varchar(10),订单属性 varchar(20),数量 bigint)
    insert into #xi values('1','第10单以上',2249)
    insert into #xi values('1','第1单',6997)
    insert into #xi values('1','第2~3单',5845)
    insert into #xi values('1','第4~5单',2451)
    insert into #xi values('1','第6~7单',1281)
    insert into #xi values('1','第8~9单',744)
    insert into #xi values('2','第10单以上',2456)
    insert into #xi values('2','第1单',7502)
    insert into #xi values('2','第2~3单',6210)
    insert into #xi values('2','第4~5单',2659)
    insert into #xi values('2','第6~7单',1415)
    insert into #xi values('2','第8~9单',841)---pivot语句,不知道如何进行修改可以输出占比结果---
    Select 订单属性,[1],[2]
    From #xi  
    pivot 
    (sum(数量)
     for row in([1],[2])
    ) AS PivotTabledrop table #xi
      

  2.   


    declare @sql varchar(8000)
    select @sql = isnull(@sql + '],[' , '') + CONVERT(VARCHAR(10),[日期],120) from tb group by CONVERT(VARCHAR(10),[日期],120)
    set @sql = '[' + @sql + ']'
    exec ('select * from (select * from tb) a pivot (max([订单数量]) for [日期] in (' + @sql + ')) b order by [订单属性]')/*
    订单属性 2010-06-21 2010-06-22
    第10单以上 2249 2456
    第1单 6997 7502
    第2~3单 5845 6210
    第4~5单 2451 2659
    第6~7单 1281 1415
    第8~9单 744 841*/
      

  3.   

    create table Test111
    (a datetime,
    b nvarchar(50),
    c float)insert into test111(a,b,c)
    select '2010-6-21','第10单以上','2249' union all
    select '2010-6-21','第2~3单','5845' union all
    select '2010-6-21','第8~9单','744' union all
    select '2010-6-21','第1单','6997' union all
    select '2010-6-21','第4~5单','2451' union all
    select '2010-6-21','第6~7单','1281' union all
    select '2010-6-22','第10单以上','2456' union all
    select '2010-6-22','第2~3单','6210' union all
    select '2010-6-22','第8~9单','841' union all
    select '2010-6-22','第1单','7502' union all
    select '2010-6-22','第4~5单','2659' union all
    select '2010-6-22','第6~7单','1415'  EXEC sp_dbcmptlevel 'att2008',90 
    select * from  (select a.a ,a.b as b,a.c/sumc*100 as c  from test111 a 
     inner join (select a,sum(c) as  sumc  from test111 group by a) b on a.a=b.a  ) aa
     pivot (sum(c) 
    for a in ([2010-06-21],[2010-06-22])) as pvt
      

  4.   

    select * from  (select a.a ,a.b as b,cast(cast (a.c/sumc*100 as decimal(18,2)) as nvarchar(20))+'%' as c  from test111 a 
     inner join (select a,sum(c) as  sumc  from test111 group by a) b on a.a=b.a  ) aa
     pivot (max(c) 
    for a in ([2010-06-21],[2010-06-22])) as pvt
    这个是结果
    b                                                  2010-06-21            2010-06-22
    -------------------------------------------------- --------------------- ---------------------
    第10单以上                                             11.49%                11.65%
    第1单                                                35.76%                35.58%
    第2~3单                                              29.87%                29.46%
    第4~5单                                              12.53%                12.61%
    第6~7单                                              6.55%                 6.71%
    第8~9单                                              3.80%                 3.99%
      

  5.   

    高!
    btw: 熊猫是国宝, 打你不能还手
      

  6.   

    主要是SQL语句 已经相当长了,而且 要写很多这种功能的转换,所以 如果采用熊猫的方法,需要修改的东西比较多,而且 会有一些效率的影响。