假设有张学生成绩表(tb_rowtocol)如下
Name Subject Result
张三 语文 73
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94想变成
姓名 语文 数学 物理
张三 73 83 93
李四 74 84 94declare @sql varchar(4000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from rowtocol) as a
set @sql = @sql + ' from rowtocol group by name'
exec(@sql)
下面那段存储过程,我是怎么都看不懂,特别是when '''这怎么会有三个‘,第一句@sql为什么不能放下来?哪位帮我详细解释一下,最好每句都说一下,100分都给他!
Name Subject Result
张三 语文 73
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94想变成
姓名 语文 数学 物理
张三 73 83 93
李四 74 84 94declare @sql varchar(4000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from rowtocol) as a
set @sql = @sql + ' from rowtocol group by name'
exec(@sql)
下面那段存储过程,我是怎么都看不懂,特别是when '''这怎么会有三个‘,第一句@sql为什么不能放下来?哪位帮我详细解释一下,最好每句都说一下,100分都给他!
解决方案 »
- SQL 里面自带的事件跟踪器 如何跟踪到某个IP对某几个表所有的事件
- ??? 中英文字段转换 ???
- 大家早上好,请求帮助,先谢谢了
- 怎样让所有的视图重新alter一次呢?有点急,小弟先感谢了!
- 求救:MS SQL SERVER完全备份失败
- ?向表中插入数据,请高手回复!
- ORACLE 关联查询的区别
- 求助:"列=值"字符串分解为数据集
- sql server导入数据失败怎么办啊??急救 一直在线等
- 学金融的 想搞软件开发,看我的计算机能力能找什么样的工作????????
- SSPI handshake failed with error code 0x8009030c while establishing a connection with integrated security; the connection has be
- 带#的临时表和带@的表有什么区别?
set @sql = 'select Name as ' + '姓名' --先赋值‘姓名’字段
select @sql = @sql + ' , sum(case Subject when '''
+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from rowtocol) as a --循环把课程都找出来做表头
set @sql = @sql + ' from rowtocol group by name' --加上查询的表
exec(@sql) --执行查询
SUBJECT VARCHAR(10),
RESULT INT
)INSERT INTO #A
SELECT '张三','语文',73 UNION
SELECT '张三','数学',83 UNION
SELECT '张三','物理',93 UNION
SELECT '李四','语文',74 UNION
SELECT '李四','数学',84 UNION
SELECT '李四','物理',94
DECLARE @SQL VARCHAR(4000)
SET @SQL = 'SELECT NAME AS ' + '姓名'
SELECT @SQL = @SQL + ' , SUM(CASE SUBJECT WHEN '''+SUBJECT+''' THEN RESULT END) ['+SUBJECT+']'
FROM (SELECT DISTINCT SUBJECT FROM #A) AS A
SET @SQL = @SQL + ' FROM #A GROUP BY NAME'PRINT @SQL
EXEC(@SQL)
--------------------
SELECT NAME AS 姓名 ,
SUM(CASE SUBJECT WHEN '数学' THEN RESULT END) [数学] ,
SUM(CASE SUBJECT WHEN '物理' THEN RESULT END) [物理] ,
SUM(CASE SUBJECT WHEN '语文' THEN RESULT END) [语文]
FROM #A GROUP BY NAME
三个引号:这是在字符串中引用变量,比如你要在字符串中引用字符的话要加上两个引号。
set @sql = 'select Name as ' + '姓名' --先赋值‘姓名’字段
select @sql = @sql + ' , sum(case Subject when '''
+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from rowtocol) as a --循环把课程都找出来做表头
set @sql = @sql + ' from rowtocol group by name' --加上查询的表
exec(@sql) --执行查询