首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

重金求子 查询 , # 100% 结贴解决方案

2013-12-06 
重金求子查询,, #############100% 结贴 declare @sql nvarchar(1000) select @sqlisnull(@sql+,,)+

重金求子 查询 ,, ############# 100% 结贴


 declare @sql nvarchar(1000)
 select @sql=isnull(@sql+',','')+'max(case when course='''+course+''' then grade else 0 end) as '+course+''
 from (select distinct course from #aa) a
print @sql

--------------------
  max(case when course='数学' then grade else 0 end) as 数学,max(case when course='英语' then grade else 0 end) as 英语,max(case when course='语文' then grade else 0 end) as 语文


上面是行转列一个查询语句。。但是不明白的是为什么@sql输入的是这个,
 t @sql=isnull(@sql+',','') 这算是循环吗? 查询语句是怎么查询的,?或者说是怎么样的一种运行机制?
[解决办法]
这是一种比较特别的写法,sql server特有的写法把

就是当你的select子句中有一个变量,并且是这种格式:

select @t = @t + xxx
from tb

那么就像是一个循环一下,会不断把xxx加到@t变量中
[解决办法]
这个是一种挺有用的技巧把。

特别是用于拼接动态语句时,就如你上面的语句一样
[解决办法]
isnull(@sql+',','') 
2个作用: 
1.首次执行时,自动赋值''给@sql.
2.行与行之间,用逗号连接在一起.
[解决办法]
找到所有的科目,把Case When 字符串合并到一起
[解决办法]
不算循环,只是把某列一直累加上去

热点排行