我有一个表table,有编号(id),名称(name),日期(date)...等字段,通过交叉表查询实现    2007-1-1  2007-1-2  2007-1-3  2007-1-4  ...
编号    名称      名称      名称      名称    ...
编号    名称      名称      名称      名称    ...
编号    名称      名称      名称      名称    ...
...--------------------------------------------------------------------------
declare   @sql   varchar(5000)
set   @sql=''
select @sql=@sql+',['+date+']=max(case date when '''+date+''' then name end)'
from table group by date order by date
set @sql='select id'+@sql+' from table group by id
exec(@sql)
交叉表的查询已经做好了。可目前有个问题就是我的编号字段有些并不是唯一的(有重复),但通过上面的交叉表查询出来的结果是单元格内只显示一条数据。有什么方法能让单元格中同时绑定几个name,中间分分隔符连接?
再有就是我的表中有个BIT型的字段,交叉表查询后是要绑定到GRIDVIEW的,怎样根据BIT的值自定义GRIDVIEW中单元格的背景颜色?谢谢

解决方案 »

  1.   

    在动态sql中调用这个函数试试看GO
    create function f_str(@id varchar(10))
    returns varchar(100)
    as
    begin
      declare @str varchar(100)
      set @str=''
      select @str=@str+[name] from A where [id]=@id
      return @str
    end
      

  2.   

    试试看~
    declare   @sql   varchar(5000)
    set   @sql=''
    select @sql=@sql+',['+date+']=max(case date when '''+date+''' then dbo.f_str('+id+') end)'
    from tablename group by date order by date
    set @sql='select id '+@sql+' from tablename group by id'
    exec(@sql)
      

  3.   

    创建函数:
    create function f_str(@id varchar(10))
    returns varchar(100)
    as
    begin
      declare @str varchar(1000)
      set @str=''
      select @str=@str+[name] from 表名 where [id]=@id
      return @str
    end
    在语句中调用:declare   @sql   varchar(5000)
    set   @sql=''
    select @sql=@sql+',['+date+']=max(case date when '''+date+''' then dbo.f_str('+id+') end)'
    from 表明 group by date order by date
    set @sql='select id '+@sql+' from 表明 group by id'
    exec(@sql)