create table ta(name varchar(2), date datetime)
insert ta select 'a',   '2007-1-1'
insert ta select 'b',   '2007-1-3'
insert ta select 'a',   '2007-2-3'
insert ta select 'a',   '2007-4-5'
insert ta select 'a',   '2007-6-8'
insert ta select 'b',   '2007-3-3'
insert ta select 'c',   '2007-3-3'
insert ta select 'd',   '2007-3-9'select *,id=1 into #
from ta order by name asc,date ascdeclare @a varchar(2),@i int
update #
set @i=case when name=@a then @i+1 else 1 end,
@a=name,id=@ideclare @sql varchar(4000)
set @sql='select name'
select @sql=@sql+',[记录'+rtrim(id)+']=max(case when id='+rtrim(id)+' then date  end)'
from # group by id
exec(@sql+' from # group by name')name 记录1                     记录2                     记录3                     记录4
---- ----------------------- ----------------------- ----------------------- -----------------------
a    2007-01-01 00:00:00.000 2007-02-03 00:00:00.000 2007-04-05 00:00:00.000 2007-06-08 00:00:00.000
b    2007-01-03 00:00:00.000 2007-03-03 00:00:00.000 NULL                    NULL
c    2007-03-03 00:00:00.000 NULL                    NULL                    NULL
d    2007-03-09 00:00:00.000 NULL                    NULL                    NULL
警告: 聚合或其他 SET 操作消除了空值。(4 行受影响)

解决方案 »

  1.   

    create table ta(name varchar(2), date datetime)
    insert ta select 'a',   '2007-1-1'
    insert ta select 'b',   '2007-1-3'
    insert ta select 'a',   '2007-2-3'
    insert ta select 'a',   '2007-4-5'
    insert ta select 'a',   '2007-6-8'
    insert ta select 'b',   '2007-3-3'
    insert ta select 'c',   '2007-3-3'
    insert ta select 'd',   '2007-3-9'
    --通过临时表
    select *,id=1 into #
    from ta order by name asc,date asc
    --更新临时表id为记录数
    declare @a varchar(2),@i int
    update #
    set @i=case when name=@a then @i+1 else 1 end,
    @a=name,id=@i
    --查询
    declare @sql varchar(4000)
    set @sql='select name'
    select @sql=@sql+',[记录'+rtrim(id)+']=max(case when id='+rtrim(id)+
    ' then convert(varchar(10),date,120) else '''' end)'--不显示null时
    from # group by id
    exec(@sql+' from # group by name')name 记录1        记录2        记录3        记录4
    ---- ---------- ---------- ---------- ----------
    a    2007-01-01 2007-02-03 2007-04-05 2007-06-08
    b    2007-01-03 2007-03-03            
    c    2007-03-03                       
    d    2007-03-09                       (4 行受影响)
      

  2.   

    ---一年就12个月,可以不用动态sql,不过有点麻烦。DECLARE @t TABLE(字段1 varchar(10),Quarter datetime)
    INSERT @t SELECT 'a', '2007-1-1'
    UNION ALL SELECT 'b', '2007-1-3'
    UNION ALL SELECT 'a', '2007-2-3'
    UNION ALL SELECT 'a', '2007-4-5'
    UNION ALL SELECT 'a', '2007-6-8'
    UNION ALL SELECT 'b', '2007-3-3'
    UNION ALL SELECT 'c', '2007-3-3'
    UNION ALL SELECT 'd', '2007-3-9'
    select  字段1,
    字段2=max(CASE convert(char(7),Quarter,21) WHEN  convert(char(4),Quarter,21)+'-01' THEN Quarter END),
    字段3=max(CASE convert(char(7),Quarter,21) WHEN  convert(char(4),Quarter,21)+'-02' THEN Quarter END),
    字段4=max(CASE convert(char(7),Quarter,21) WHEN  convert(char(4),Quarter,21)+'-03' THEN Quarter END),
    字段5=max(CASE convert(char(7),Quarter,21) WHEN  convert(char(4),Quarter,21)+'-04' THEN Quarter END),
    字段6=max(CASE convert(char(7),Quarter,21) WHEN  convert(char(4),Quarter,21)+'-05' THEN Quarter END),
    字段7=max(CASE convert(char(7),Quarter,21) WHEN  convert(char(4),Quarter,21)+'-06' THEN Quarter END),
    字段8=max(CASE convert(char(7),Quarter,21) WHEN  convert(char(4),Quarter,21)+'-07' THEN Quarter END),
    字段9=max(CASE convert(char(7),Quarter,21) WHEN  convert(char(4),Quarter,21)+'-08' THEN Quarter END),
    字段10=max(CASE convert(char(7),Quarter,21) WHEN  convert(char(4),Quarter,21)+'-09' THEN Quarter END),
    字段11=max(CASE convert(char(7),Quarter,21) WHEN  convert(char(4),Quarter,21)+'-10' THEN Quarter END),
    字段12=max(CASE convert(char(7),Quarter,21) WHEN  convert(char(4),Quarter,21)+'-11' THEN Quarter END),
    字段13=max(CASE convert(char(7),Quarter,21) WHEN  convert(char(4),Quarter,21)+'-12' THEN Quarter END)
    FROM @t
    GROUP BY 字段1
      

  3.   

    谢谢,roy_88(中国风_燃烧你的激情!!!) !