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