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行转列

解决方案 »

  1.   

    字符跟字符串
    把''改为null
      

  2.   

    declare @sql1 nvarchar(4000)
    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出来看看,你就知道了。 
      

  3.   

    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 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')
      

  4.   

    大哥 print 结果看啦
    第一种: ,[数学],[物理],[英语],[语文]
    第二种:[数学],[物理],[英语],[语文]
    我想 知道的 是 为什么 会出现这两种结果
    我只是 加啦一句 
    Set @sql1 = ''  而已 
    为什么 差别 这么大 
      

  5.   

    我知道 去掉 一个 多余的 , 
    但是 问题 是 我想表达的意思 是说 
    第一种 方式 ,和第二种方式  没什么差别
    只是差别在于多一句:Set @sql1 = ''
    为什么差别 这么大
    我认为 两种方式 的 结果 返回的 都是  ,[数学],[物理],[英语],[语文]
    可是 第二种 却不是 :为什么