@ckey 是一个变量,你把dayid  替换成@ckey,再显示一下你组合在一起的字符串是不你想要的,就可以了。多测试几下

解决方案 »

  1.   

    用executesql就可以了。不过,这样要拼接两次,有点复杂。没有测试环境很容易出错。你还是把##TempData表的结构贴出来吧,顺便加点测试数据
      

  2.   

    declare @sql varchar(8000),@cKey nvarchar(300)
    set @sql = ''
    set @cKey = 'dayid'set @sql = 'select distinct '+@ckey+' as col into ##t from ##TempData'
    exec(@sql)set @sql = 'select emplno'
    select @sql = @sql + ',sum(case  ' + @ckey + ' when '''+  col   +''' then sumoperate else 0 end) ['+right(@cKey,2)+']'
    from ##tdrop table ##tset @sql = @sql+' from ##TempData  group by emplno'print @sql 
    exec(@sql)
    go
      

  3.   

    declare @sql varchar(8000),@cKey nvarchar(300)set @sql = 'select emplno'
    set @cKey = 'dayid'
    set @sql = @sql + ',sum(case  ' + @ckey + ' when '''+  @cKey   +''' then sumoperate else 0 end) ['+right(@cKey,2)+'] from (select distinct  dayid     from  ##TempData ) as a'
      
     
    set  @sql = @sql+' from ##TempData  group by emplno'print @sql 
    --exec(@sql)
    --go
      

  4.   

    to Swanzy:
       就这个问题挺烦人的,搞得云里雾里,哪有心情帮你顶咯,现在自己搞定了,怎么顶都行啦。嘿嘿..
      

  5.   

    上面语句:
    select @sql = @sql + ',sum(case  ' + @ckey + ' when '''+  dayid   +''' then sumoperate else 0 end) ['+right(@cKey,2)+']'
      from (select distinct  dayid     from  ##TempData ) as a
     
    select @sql = @sql+' from ##TempData  group by emplno'dayid  改成  @ckey 参数要dayid 改成参数,在运行时指定字段,
    简单一点:字段范围确定,
    可以在dayid位置替换成 case @ckey when 'dayid' then dayid when '...' then ....cast(.as varchar)....end否则要动态执行,用 sp_executesql 
    形如:EXEC sp_executesql @s, N'@r varchar(400) OUTPUT',@c1s OUTPUT 意思不明确,最初的目的是什么?
    问题应集中在:
    ',sum(case  ' + @ckey + ' when '''+  dayid   +''' then sumoperate else 0 end) ['+right(@cKey,2)+']'的处理上。在字符串连接上应注意变量类型和目标字符串sql语句中常量/变量对应关系,
    特别是涉及字符串。这应该应在纵横转换上。
      

  6.   

    我的想法:
        就是读取一个月内每天的收入的数据,把天数(1-31)转成横向的列,考虑到将此功能通用性,而不仅中只是适应某一个表或某一字段,所以才来这里发贴将其中固定的字段 dayId 换成 @cKey 的方式来提高其通用性。我最后解决的方法:
        因为在此过程中,我用了一个临时表 ##TempData  ,而临时表的列就可能变得到很灵活,可以是其它的表,也可以是其它不同于 dayid  的字段名,只要在写入到 ##TempData  时,将其对应关键的字段但名字不是为 dayid  的字段的别名设为  dayid  
    感谢各位的热情帮助!!!