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

SQL Incorrect syntax when creating pivot

当运行这段代码时:

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)

我收到这些错误:

Msg 156, Level 15, State 1, Line 7
Incorrect syntax near the keyword 'select'.

Msg 102, Level 15, State 1, Line 7
Incorrect syntax near ')'.

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

提前致谢!

你能改变 SELECT@cols 的查询如下,然后尝试:

SELECT @cols = STUFF((
            SELECT ',' + QUOTENAME(USRankTitle)
            FROM #yt
            GROUP BY USRankTitle
            ORDER BY USRankTitle
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)'), 1, 1, '')

execute(@query)前也加上PRINT @query,可以检查组合查询。