日期:2014-05-19  浏览次数:20745 次

关于交叉表查询后的数据绑定问题!
我有一个表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)

交叉表的查询如上现在已经搞定了,可以直接绑定到GRIDVIEW上了。不过有个问题是,我的编号字段是1到16中的一个数,排序由低到高。如果是绑定到GRIDVIEW的话,数据库中假如没有其中一个数,绑定出来的GRIDVIEW是没有那一行的,但我的表是即使没有那一行也要有编号和一个空行。之前本来在ASP.NET区询问,怎样用GRIDVIEW或TABLE实现,但给出的建议是最好还是在交叉表查询的时候实现。仔细想想这样更好,所以来这里问。
顺便想问的是上面的SQL存储过程如果在代码里实现?我用C#,谢谢。我现在用的是个笨办法,在分析查询器里用了个print   @sql,查看了一下最终的语句,复制到了sqlcommand.commandText里,因为我的查询结果只是一周的数据,所以日期字段是函数调用的。不过多了或日期字段没有明确值就没法用了。再次谢谢

------解决方案--------------------
--sorry, 漏了一些

select * from
(
select 编号=1
union all select 2
union all select 3
union all select 4

...

union all select 16
)A
left join (动态SQL生成的结果集) B on A.编号=B.编号
------解决方案--------------------
自动填充固定行数的 GridView
http://dotnet.aspx.cc/article/ee911c00-0e99-4e50-a941-3defa599ef48/read.aspx