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