关于交叉表的问题(100分)

  • 主题发起人 主题发起人 drifer
  • 开始时间 开始时间
D

drifer

Unregistered / Unconfirmed
GUEST, unregistred user!
有这样一个问题,大家都知道交叉表就是用一个递归查询来从另一个得到一个列的数据,<br>  declare @sql varchar(8000)  <br>  set @sql = 'select name,'  <br>  select @sql = @sql + 'sum(case subject when ''+subject+'' --这是一个递归 <br>  then source else 0 end) as ''+subject+'','  <br>  from (select distinct subject from test) as a<br>  select @sql = left(@sql,len(@sql)-1) + ' from test group by name'<br>  exec(@sql)<br>&nbsp; &nbsp; 但如果另一个表的数据很大,那么@sql的字符长度就不够了(超过8000个字符),请问能有什么方法优化这个查询呢?
 
后台计算数据<br><br>前台 扭转 行列<br>用 adodataset .createdataset &nbsp;或 内存表 都可以
 
sql2005 可以 varchar(max)
 
个人观点,如果一个递归产生的执行语句超过8000个字符,应该考虑换一种方法来实现,因为语句太长,调试或阅读都是个麻烦。<br>一定要这样做的话,Sql 2005可定义为declare @sql varchar(max),max不受8000限制。 
 
declare @sal varchar(max)<br>我也试过,还len(@sql) 结果它的长度为8197
 
那 就 前台 扭转 行列吧<br>用 adodataset .createdataset &nbsp;或 内存表 都可以 <br>交叉表 实际上 是显示上的 交叉 <br>用前台做 简单
 
还是用了varchar @sql VARCHAR(MAX)<br>我用PRINT出来的看不全,EXEC(@sql)就可以了。<br>谢谢,加分了!
 
后退
顶部