读书人

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

发布时间: 2013-12-06 17:56:43 作者: rapoo

重金求子 查询 ,, ############# 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 字符串合并到一起
[解决办法]
不算循环,只是把某列一直累加上去

读书人网 >SQL Server

热点推荐