日期:2014-05-16  浏览次数:20439 次

关于统计SQL 的问题。

declare @sql varchar(8000),@subt varchar(8000)
set @sql = 'select c_name '
set @subt ='select * from cqtj_data where ( c_cqrq between 20140301 and 20140305 )'
select @sql = @sql + ' , sum(case c_cqlb when ''' + c_cqlb + ''' then c_cqsl else 0 end) [' + c_cqlb + ']'
from (select distinct c_cqlb from cqtj_data) as a
set @sql = @sql + ' from '+@subt +' t'+' group by c_name ' 
exec(@sql)


检查语法没有错误,但是执行就有错误,具体:

服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'select' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: 't' 附近有语法错误。

如果将subt 换成一个 cqtj_data 表名就可以执行了。 但是我想在已经检索的结果中在执行统计。这样写肯定不行,请高手指点。
------解决方案--------------------
把exec改成print,看看有没有什么语法错误,貌似少了括号
------解决方案--------------------
declare @sql varchar(8000),@subt varchar(8000)
set @sql = 'select c_name '
set @subt ='(select * from cqtj_data where  c_cqrq between 20140301 and 20140305 )'
select @sql = @sql + ' , sum(case c_cqlb when ''' + c_cqlb + ''' then c_cqsl else 0 end) [' + c_cqlb + ']'
from (select distinct c_cqlb from cqtj_data) as a
set @sql = @sql + ' from '+@subt +' t'+' group by c_name ' 
EXEC(@sql)