DECLARE @s nvarchar(4000)
SET @s = N''SELECT @s = @s 
+ N',' + QUOTENAME(xjdd) + N'= SUM(CASE xjdd WHEN N' 
+ QUOTENAME(xjdd, N'''') + N' THEN yxcs ELSE 0 END)'
FROM(
SELECT DISTINCT xjdd FROM AQ_DDXCPL
)A
EXEC(N'
SELECT xjld '+ @s + N'
  FROM AQ_DDXCPL
GROUP BY xjld')
=========================================分割线============================
DECLARE @s nvarchar(4000)
SET @s = N''SELECT @s = @s 
+ N',' + QUOTENAME(xjdd) + N'= SUM(CASE xjdd WHEN N' 
+ QUOTENAME(xjdd, N'''') + N' THEN yxcs ELSE 0 END)'
FROM(
SELECT DISTINCT xjdd FROM AQ_DDXCPL
)A
EXEC(N'
SELECT xjld '+ @s + N'
   into #a FROM AQ_DDXCPL  -------插入临时表
GROUP BY xjld')select * from #a --- 错误
drop table #a

解决方案 »

  1.   

    臨時表有作用域的,你這個臨時表只在EXEC內部有效,改用全局臨時表吧。DECLARE @s nvarchar(4000)
    SET @s = N''SELECT @s = @s 
    + N',' + QUOTENAME(xjdd) + N'= SUM(CASE xjdd WHEN N' 
    + QUOTENAME(xjdd, N'''') + N' THEN yxcs ELSE 0 END)'
    FROM(
    SELECT DISTINCT xjdd FROM AQ_DDXCPL
    )A
    EXEC(N'
    SELECT xjld '+ @s + N'
       into ##a FROM AQ_DDXCPL  -------插入临时表
    GROUP BY xjld')select * from ##a 
    drop table ##a
      

  2.   

    EXEC(N'
    SELECT xjld '+ @s + N'
       into #a FROM AQ_DDXCPL  -------插入临时表
    GROUP BY xjld')
    select * from #a --- 错误
    drop table #a
    ---------------------------------------------------------------------------------
    把#a改成##a,即将局部临时表换成全局临时表。
      

  3.   

    你怎么一天到晚都在留qq msn 交流下