declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) '+Subject+''
from (select distinct Subject from tt) as a
select @sql = @sql+' from tt group by name'
exec(@sql) '''+Subject+''' 这3个引号是什么意思啊,
这句话看不太懂 
这是哪方面的知识啊  我需要看哪块的知识

解决方案 »

  1.   

    分隔标识符。
    参考!
    http://msdn.microsoft.com/zh-cn/library/ms176027.aspx
      

  2.   

    --动态sql语句基本语法
     
    1 :普通SQL语句可以用Exec执行 eg: Select * from tableName 
    Exec('select * from tableName') 
    Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg: 
    declare @fname varchar(20) 
    set @fname = 'FiledName' 
    Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 
    Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可 
    declare @fname varchar(20) 
    set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s) -- 成功 
    exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s) -- 成功 
    exec sp_executesql @s -- 此句正确 3. 输出参数 
    declare @num int, 
    @sqls nvarchar(4000) 
    set @sqls='select count(*) from tableName' 
    exec(@sqls) 
    --如何将exec执行结果放入变量中? declare @num int, 
    @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
      

  3.   

    引号是转义字符 和程序里面的一样 不懂动态语句的时候可以PRINT出来看看
      

  4.   

    select  'O''Brien'
    --O'BrienSELECT ''''
    --'单引号只用于包含字符串,不能用于分隔标识符。如果字符串包含嵌入的单引号,则应在该嵌入的单引号前再添加一个单引号。
      

  5.   

    转义  单引号里面连续的2个单引号 表示一个单引号 
    select  ''''   得到一个单引号
    select 'abc''abc'  得到 abc'abc  
      

  6.   

    更正。 单引号是转义字符。sql   server有两个转义符: 
    默认情况下,   '是字符串的边界符,   如果在字符串中包含 ',   则必须使用两个 ',   第1个 '就是转义符另一个转义符是 " 
    当SET   QUOTED_IDENTIFIER   OFF时,   "是字符串边界符,   字符串中的 "必须用两个 "表示。
      

  7.   

    不明白的话
    select '''***'  试试就知道了