基本数据:
   id     vorgid     vunit      vdata      icount 
     1       160        9        20100514    21
     2       171        9         20100514     1
     3       160        9         20100515    29  
     4       163        9         20100515     30
     6       178        9         20100515     2
     7       178         9   20100515     3
     8       177        9          20100516      1
     9       178        9          20100516      1
     10      212        8          20100517      15
     11      220        8    20100517     15
后: 
             160   178  171   212  220  163  177
  5月17日 一  null  null null  15   15   null null
  5月16日 日  null    1   1    null null null null
  5月15日 六   ...
  5月14日 五  

解决方案 »

  1.   


    select vdata ,
    sum(case when vorgid =160 then icount  else null end) as [160],
    sum(case when vorgid =178 then icount  else null end) as [178],
    sum(case when vorgid =171 then icount  else null end) as [171], 
    sum(case when vorgid =212 then icount  else null end) as [212], 
    sum(case when vorgid =220 then icount  else null end) as [220], 
    sum(case when vorgid =163 then icount  else null end) as [163], 
    sum(case when vorgid =177 then icount  else null end) as [177]
    from [表]
    group by vdata 
      

  2.   


    if OBJECT_ID('tb') is not null
    drop table tb
    go
    create table tb(id int,vorgid int,vunit int,vdata date,icount int)
    insert into tb
    select   1, 160, 9, '20100514' ,21 union all
    select   2, 171, 9, '20100514' ,1 union all
    select   3, 160, 9, '20100515' ,29   union all 
    select   4, 163, 9, '20100515' ,30 union all
    select   6, 178, 9, '20100515' ,2 union all
    select   7, 178, 9, '20100515' ,3 union all
    select   8, 177, 9, '20100516' ,1 union all
    select   9, 178, 9, '20100516' ,1 union all
    select   10, 212, 8, '20100517', 15 union all
    select   11, 220, 8, '20100517', 15 
      declare @sql varchar(8000)
      set @sql=''
      select @sql=@sql+','+QUOTENAME(vorgid)+' =max( case ltrim(vorgid) when '''+ltrim(vorgid)+''' then icount else null end)'
      from tb
      group by vorgid
    --  print @sql
     exec('select vdata '+@sql+' from tb group by vdata')
      

  3.   


    vdata 160 163 171 177 178 212 220
    2010-05-14 21 NULL 1 NULL NULL NULL NULL
    2010-05-15 29 30 NULL NULL 3 NULL NULL
    2010-05-16 NULL NULL NULL 1 1 NULL NULL
    2010-05-17 NULL NULL NULL NULL NULL 15 15
      

  4.   

    ---测试数据---
    if object_id('[tb]') is not null drop table [tb]
    go
    create table [tb]([id] int,[vorgid] int,[vunit] int,[vdata] datetime,[icount] int)
    insert [tb]
    select 1,160,9,'20100514',21 union all
    select 2,171,9,'20100514',1 union all
    select 3,160,9,'20100515',29 union all
    select 4,163,9,'20100515',30 union all
    select 6,178,9,'20100515',2 union all
    select 7,178,9,'20100515',3 union all
    select 8,177,9,'20100516',1 union all
    select 9,178,9,'20100516',1 union all
    select 10,212,8,'20100517',15 union all
    select 11,220,8,'20100517',15
     
    ---查询---
    declare @sql varchar(8000)
    select 
      @sql=isnull(@sql+',','')
      +'sum(case when vorgid='+ltrim(vorgid)+' then icount else 0 end) as ['+ltrim(vorgid)+']'
    from
      (select distinct vorgid from tb) t
    exec ('
    select 
      ltrim(month(vdata))+''月''+ltrim(datepart(dd,vdata))+''日'' as 日期,
      right(datename(weekday,vdata),1) as 星期,'
    +@sql
    +'from tb 
      group by 
      ltrim(month(vdata))+''月''+ltrim(datepart(dd,vdata))+''日'',
      right(datename(weekday,vdata),1) 
      order by 1')---结果---
    日期                           星期   160         163         171         177         178         212         220
    ---------------------------- ---- ----------- ----------- ----------- ----------- ----------- ----------- -----------
    5月14日                        五    21          0           1           0           0           0           0
    5月15日                        六    29          30          0           0           5           0           0
    5月16日                        日    0           0           0           1           1           0           0
    5月17日                        一    0           0           0           0           0           15          15(4 行受影响)
      

  5.   

    ---查询---
    declare @sql varchar(8000)
    select 
      @sql=isnull(@sql+',','')
      +'sum(case when vorgid='+ltrim(vorgid)+' then icount end) as ['+ltrim(vorgid)+']'
    from
      (select distinct vorgid from tb) t
    exec ('
    select 
      ltrim(month(vdata))+''月''+ltrim(datepart(dd,vdata))+''日'' as 日期,
      right(datename(weekday,vdata),1) as 星期,'
    +@sql
    +'from tb 
      group by 
      ltrim(month(vdata))+''月''+ltrim(datepart(dd,vdata))+''日'',
      right(datename(weekday,vdata),1) 
      order by 1')---结果---
    日期                           星期   160         163         171         177         178         212         220
    ---------------------------- ---- ----------- ----------- ----------- ----------- ----------- ----------- -----------
    5月14日                        五    21          NULL        1           NULL        NULL        NULL        NULL
    5月15日                        六    29          30          NULL        NULL        5           NULL        NULL
    5月16日                        日    NULL        NULL        NULL        1           1           NULL        NULL
    5月17日                        一    NULL        NULL        NULL        NULL        NULL        15          15(4 行受影响)
      

  6.   


      declare @sql varchar(8000)
      set @sql=''
      select @sql=@sql+','+QUOTENAME(vorgid)+' =max( case ltrim(vorgid) when '''+ltrim(vorgid)+''' then icount else null end)'
      from tb
      group by vorgid
    --  print @sql
     exec('select ltrim(DATEPART(YEAR,vdata))+''年''+ltrim(DATEPART(M,vdata))+''月''+ltrim(DATEPART(D,vdata))+''日'' as date,
                  case DATEPART(WEEKDAY,vdata) when 1 then ''周一''
                                               when 2 then ''周二''
                                               when 3 then ''周三''
                                               when 4 then ''周四''
                                               when 5 then ''周五''
                                               when 6 then ''周六''
                                               when 7 then ''周日'' 
                  else null end as weekday'+@sql+
          ' from tb group by vdata')
    date weekday 160 163 171 177 178 212 220
    2010年5月14日 周六 21 NULL 1 NULL NULL NULL NULL
    2010年5月15日 周日 29 30 NULL NULL 3 NULL NULL
    2010年5月16日 周一 NULL NULL NULL 1 1 NULL NULL
    2010年5月17日 周二 NULL NULL NULL NULL NULL 15 15
      

  7.   


    表:
     id   vorid  name
      1     160   湖南
      2     163    湖北怎么替换 160..和其他的数据
    你写的怎么来做多表连接 谢谢 我是新手 很多还不懂
      

  8.   


    表:
     id vorid name
      1 160 湖南
      2 163 湖北怎么替换 160..和其他的数据
    你写的怎么来做多表连接 谢谢 我是新手 很多还不懂
      

  9.   

    最后显示为
     时间  湖南 湖北 ...
          湖南 湖北...
           null 1...
      

  10.   

    declare @sql varchar(8000)
      set @sql=''
      select @sql=@sql+','+QUOTENAME(ta.name)+' =max( case ltrim(vorgid) when '''+ltrim(vorgid)+''' then icount else null end)'
      from tb join ta on tb.vorgid=ta.vorid
      group by ta.name,tb.vorgid
    --  print @sql
     exec('select ltrim(DATEPART(YEAR,vdata))+''年''+ltrim(DATEPART(M,vdata))+''月''+ltrim(DATEPART(D,vdata))+''日'' as date,
                  case DATEPART(WEEKDAY,vdata) when 1 then ''周一''
                                               when 2 then ''周二''
                                               when 3 then ''周三''
                                               when 4 then ''周四''
                                               when 5 then ''周五''
                                               when 6 then ''周六''
                                               when 7 then ''周日'' 
                  else null end as weekday'+@sql+
          ' from tb group by vdata')
      

  11.   


    要是能够把 它们的和算出来更好 
    地区    星期  合    湖南 湖北  ————把此行放到数据库里面去!
      5月17日 一   30    null null null 15 15 null null
      5月16日 日    2    null 1 1 null null null null
      5月15日 六         ...
      5月14日 五
      

  12.   


    declare @sql varchar(8000)
      set @sql=''
      select @sql=@sql+','+QUOTENAME(ta.name)+' =max( case ltrim(vorgid) when '''+ltrim(vorgid)+''' then icount else null end)'
      from tb join ta on tb.vorgid=ta.vorid
      group by ta.name,tb.vorgid
    --  print @sql
     exec('select ltrim(DATEPART(YEAR,vdata))+''年''+ltrim(DATEPART(M,vdata))+''月''+ltrim(DATEPART(D,vdata))+''日'' as date,
                  case DATEPART(WEEKDAY,vdata) when 1 then ''周一''
                                               when 2 then ''周二''
                                               when 3 then ''周三''
                                               when 4 then ''周四''
                                               when 5 then ''周五''
                                               when 6 then ''周六''
                                               when 7 then ''周日'' 
                  else null end as weekday , 合计=sum(icount)'+@sql+
          ' from tb group by vdata')date weekday 合计 湖北 湖南
    2010年5月14日 周六 22 NULL 21
    2010年5月15日 周日 64 30 29
    2010年5月16日 周一 2 NULL NULL
    2010年5月17日 周二 30 NULL NULL