数据库表如下
时间              员工      班别
2010-04-23 王梅 早班
2010-04-25 周晓丽 晚班
2010-04-25 刘燕 晚班
2010-04-25 王梅 晚班
2010-04-23 明月 早班
2010-04-24 陈红云 早班
2010-04-24 孙红梅 早班
2010-04-24 刘燕 早班
2010-04-23 孙红梅 早班
2010-04-23 陈红云 早班
我想显示成这样的请问怎么做?
时间              早班                              中班                     晚班 
2010-04-23      王梅,明月,孙红梅,陈红云
2010-04-24       陈红云,孙红梅,刘燕
2010-04-25                                                                周晓丽,刘燕,王梅
其中 日期,班别,人数 都是不确定的 请达人帮忙解决。

解决方案 »

  1.   

    select * from table order by 班别 
      

  2.   

    先定义一个合并字符串的函数create function JoinName(@time varchar(50))
    returns varchar(8000)
    as
    begin
      declare @str varchar(8000)
      set @str = ''
      select @str = @str + ',' + cast(员工 as varchar) from TableName where 时间= @time
      set @str = right(@str , len(@str) - 1)
      return(@str)
    End
    go上述函数建立完之后 在行转列
    select 时间,case 班别 when '早班' then dbo.JoinName(时间) else null end as 早班,
    case 班别 when '中班' then dbo.JoinName(时间) else null end as 中班,
    case 班别 when '晚班' then dbo.JoinName(时间) else null end as 晚班 from TableName order by 时间
    这固定列的行转列 凑活可以  要是  动态的我就搞不定了 你去SQL板块发帖子
      

  3.   

    to 小宋 
       谢谢你 
      我去sql发个帖子去
      

  4.   

    如果你是想通过sql显示这样的结果,不能用一个SQL实现的,只能通过存储过程实现,且要借助临时表实现,而且你的班次值也必须是固定的,已知数量的,才可以实现。
    如果你是要做Report的话,Report里面的交叉表就直接能实现这个功能。