创建数据透视时的SQL不正确语法

时间:2018-07-17 13:59:19

标签: sql-server tsql pivot dynamic-sql

运行此代码时:

drop table #yt

create table #yt 
(
    [Country] NVARCHAR(MAX) , 
    [USRankTitle] NVARCHAR(MAX), 
    [xCount] int
);

INSERT INTO #yt ([Country], [USRankTitle], [xCount]) 
    SELECT 
        [Country], [USRanktitle],
        COUNT(USranktitle) AS xcount 
    FROM 
        UMADUserAccounts 
    GROUP BY
        Country, USRankTitle

DECLARE @cols AS NVARCHAR(MAX),
        @query AS NVARCHAR(MAX)

SELECT @cols = 'select USRankTitle from #yt group by USRankTitle order by 
USRankTitle'

SET @query = 'SELECT * from (
            select Country, USRankTitle 
            from #yt group by country,USRankTitle
        ) x
        pivot (
            sum(xCount) 
            for USRankTitle in (' + @cols + ')
        ) p' 

EXECUTE(@query)

我得到这些错误:

  

第156条消息,状态15,状态1,第7行
  关键字“ select”附近的语法不正确。

     

第15层状态1的7行第102条消息
  ')'附近的语法不正确。

我已经检查了代码并尝试了各种不同的方法,但似乎无法解决。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以如下更改SELECT的{​​{1}}查询并尝试:

@cols

还可以在SELECT @cols = STUFF(( SELECT ',' + QUOTENAME(USRankTitle) FROM #yt GROUP BY USRankTitle ORDER BY USRankTitle FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') 之前添加PRINT @query,并可以检查组成的查询。