if OBJECT_ID('Class') is not null
drop table Class
Create table Class
(
[Student] nvarchar(2),[Course] nvarchar(2),[Score] int
)
Insert Into Class
select N'张三',N'语文',78 union all
select N'张三',N'数学',87 union all
select N'张三',N'英语',82 union all
select N'张三',N'物理',90 union all
select N'李四',N'语文',65 union all
select N'李四',N'数学',77 union all
select N'李四',N'英语',65 union all
select N'李四',N'物理',85
第一种情况
--2005 方法
declare @sql1 nvarchar(4000)
Set @sql1 = ''
Select @sql1 = ISNULL(@sql1+',','') + QUOTENAME([Course]) from Class group by Course
print @sql1
exec('Select * From Class pivot(max([Score]) for Course in ( ' + @sql1 + '))b')
报错
',' 附近有语法错误。第二种情况
--2005 方法
declare @sql1 nvarchar(4000)
Select @sql1 = ISNULL(@sql1+',','') + QUOTENAME([Course]) from Class group by Course
print @sql1
exec('Select * From Class pivot(max([Score]) for Course in ( ' + @sql1 + '))b')
正确PS:比较上述两种方式唯一的差别在于Set @sql1 = ''
为什么 第一种方式错误呢 。SQL行转列
drop table Class
Create table Class
(
[Student] nvarchar(2),[Course] nvarchar(2),[Score] int
)
Insert Into Class
select N'张三',N'语文',78 union all
select N'张三',N'数学',87 union all
select N'张三',N'英语',82 union all
select N'张三',N'物理',90 union all
select N'李四',N'语文',65 union all
select N'李四',N'数学',77 union all
select N'李四',N'英语',65 union all
select N'李四',N'物理',85
第一种情况
--2005 方法
declare @sql1 nvarchar(4000)
Set @sql1 = ''
Select @sql1 = ISNULL(@sql1+',','') + QUOTENAME([Course]) from Class group by Course
print @sql1
exec('Select * From Class pivot(max([Score]) for Course in ( ' + @sql1 + '))b')
报错
',' 附近有语法错误。第二种情况
--2005 方法
declare @sql1 nvarchar(4000)
Select @sql1 = ISNULL(@sql1+',','') + QUOTENAME([Course]) from Class group by Course
print @sql1
exec('Select * From Class pivot(max([Score]) for Course in ( ' + @sql1 + '))b')
正确PS:比较上述两种方式唯一的差别在于Set @sql1 = ''
为什么 第一种方式错误呢 。SQL行转列
解决方案 »
- 求一个求数据库中表的数据行数的sql?急,没分了
- 求达人解惑
- sql server 2005如果正确显示音标?字符集应设置成什么
- 关于如何利用SQL对一张表进行统计汇总的问题
- 一个SQL生成报表的问题,小弟跪求
- 在同一张表里能怎么约束两个字段不能同时为空
- 谁能推荐一款好得数据库建模软件
- 用的是sql 7.0,现在数据量很大,运行占用cpu平均80%,老大们,给介绍点关于优化存取的方法和文章。
- Delphi5.0+SQL Server7.0的程序在98下正常,在NT4下不能显示货币的小数位.
- 这段代码能简化后面的WHERE后面重复的内容吗?
- byte[] byteArray = new byte[255]{};字节数组存数据库用什么类型存?
- sql server 2000 查询语句问题
把''改为null
Set @sql1 = ''
Select @sql1 = ISNULL(@sql1+',','') + QUOTENAME([Course]) from Class group by Courseprint 'Select * From Class pivot(max([Score]) for Course in ( ' + @sql1 + '))b' -- print出来看看,你就知道了。
(
[Student] nvarchar(2),[Course] nvarchar(2),[Score] int
)
Insert Into Class
select N'张三',N'语文',78 union all
select N'张三',N'数学',87 union all
select N'张三',N'英语',82 union all
select N'张三',N'物理',90 union all
select N'李四',N'语文',65 union all
select N'李四',N'数学',77 union all
select N'李四',N'英语',65 union all
select N'李四',N'物理',85 declare @sql1 nvarchar(4000)
Set @sql1 = ''
Select @sql1 = ISNULL(@sql1+',','') + QUOTENAME([Course]) from Class group by Course print @sql1 --这句去掉前面一个多余的','
set @sql1 = substring(@sql1,2,len(@sql1))exec ('Select * From Class pivot(max([Score]) for Course in ( ' + @sql1 + '))b')drop table Class调试时,可使用print看看语句是否正确?
print ('Select * From Class pivot(max([Score]) for Course in ( ' + @sql1 + '))b')
第一种: ,[数学],[物理],[英语],[语文]
第二种:[数学],[物理],[英语],[语文]
我想 知道的 是 为什么 会出现这两种结果
我只是 加啦一句
Set @sql1 = '' 而已
为什么 差别 这么大
但是 问题 是 我想表达的意思 是说
第一种 方式 ,和第二种方式 没什么差别
只是差别在于多一句:Set @sql1 = ''
为什么差别 这么大
我认为 两种方式 的 结果 返回的 都是 ,[数学],[物理],[英语],[语文]
可是 第二种 却不是 :为什么