表结构:
日期               用户ID           数量   
2006.9.20             8              20
2006.9.1             10              20
2006.9.18             1              20
2006.9.1             5              20
2006.9.13             1              20
2006.9.14             3              20
2006.9.14             2              20
2006.9.20             7              20
2006.9.10             6              20
2006.9.20             1              20
统计结果为(按月按计,如统计9月数据)
日期   用户ID1,        用户ID2,          用户ID3....
1号    数据汇总         数据汇总           数据汇总
2号    数据汇总         数据汇总           数据汇总
3号    数据汇总         数据汇总           数据汇总
4号    数据汇总         数据汇总           数据汇总
5号    数据汇总         数据汇总           数据汇总
6号    数据汇总         数据汇总           数据汇总
7号    数据汇总         数据汇总           数据汇总
8号    数据汇总         数据汇总           数据汇总
9号    数据汇总         数据汇总           数据汇总........

解决方案 »

  1.   

    请问要实现以上统计,sql语句怎么写
      

  2.   

    declare @sql varchar(8000)
    set @sql=''select @sql=@sql+',[用户ID'+rtrim(用户ID)+']=sum(case 用户ID when '+rtrim(用户ID)+' then 数量 else 0 end)' from 表 group by 用户ID order by 用户IDset @sql='select detepart(dd,日期)'+@sql+' from 表 group by detepart(dd,日期) order by detepart(dd,日期)'exec(@sql)
      

  3.   

    提示
    'detepart' 不是可以识别的 函数名。
      

  4.   

    --try
    declare @sql varchar(8000)
    set @sql=''select @sql=@sql+',[用户ID'+rtrim(用户ID)+']=sum(case 用户ID when '+rtrim(用户ID)+' then 数量 else 0 end)' from 表 group by 用户ID order by 用户IDset @sql='select datepart(dd,日期)'+@sql+' from 表 group by detepart(dd,日期) order by datepart(dd,日期)'exec(@sql)
      

  5.   

    create table test(日期 datetime, 用户ID varchar(10) , 数量 int)
    insert into test select '2006.9.20','8' ,20
    insert into test select '2006.9.1' ,'10',20
    insert into test select '2006.9.18','1' ,20
    insert into test select '2006.9.1' ,'5' ,20
    insert into test select '2006.9.13','1' ,20
    insert into test select '2006.9.14','3' ,20
    insert into test select '2006.9.14','2' ,20
    insert into test select '2006.9.20','7' ,20
    insert into test select '2006.9.10','6' ,20
    insert into test select '2006.9.20','1' ,20
    godeclare @sql varchar(8000)
    set @sql=''
    select @sql=@sql+',[用户ID'+rtrim(用户ID)+']=sum(case 用户ID when '+rtrim(用户ID)+' then 数量 else 0 end)' from test group by 用户ID order by 用户ID
    set @sql='select datepart(dd,日期) as 日期' +@sql+' from test group by datepart(dd,日期) order by datepart(dd,日期)'exec(@sql)drop table test
    go
    日期 用户ID1 用户ID10 用户ID2 用户ID3 用户ID5 用户ID6 用户ID7 用户ID8       
    1    0       20       0       0       20      0       0       0
    10   0       0        0       0       0       20      0       0
    13   20      0        0       0       0       0       0       0
    14   0       0        20      20      0       0       0       0
    18   20      0        0       0       0       0       0       0
    20   20      0        0       0       0       0       20      20
      

  6.   

    declare @sql varchar(8000)
    set @sql=''select @sql=@sql+',[用户ID'+rtrim(用户ID)+']=sum(case 用户ID when '+rtrim(用户ID)+' then 数量 else 0 end)' from 表 group by 用户ID order by 用户IDset @sql='select detepart(dd,日期)'+@sql+' from 表 group by detepart(dd,日期) order by detepart(dd,日期)'exec(@sql)统计条件放什么地方
      

  7.   

    这样的语句libin_ftsafe(子陌红尘:当libin告别ftsafe) 算是写得最快的了。
      

  8.   

    把以上SQL语句转成C#字符串怎么转
    string sql="select @sql=@sql+',[用户ID'+rtrim(用户ID)+']=sum(case 用户ID when '+rtrim(用户ID)+' then 数量 else 0 end)' from 表 group by 用户ID order by 用户ID"sql='select detepart(dd,日期)'+sql+' from 表 group by detepart(dd,日期) order by detepart(dd,日期)'";这样好像不行
      

  9.   

    楼主要转c#,只有用case 方法
      

  10.   

    select 时间=convert(varchar(8),日期,112),
    [用户id1]=sum(case 用户id when 1 then 数量 else 0 end )
    [用户id2]=.............
    from test
    group by convert(varchar(8),日期,112) 用静态
    或生成视图