【问题标题】:SQL Incorrect syntax when creating pivot创建数据透视表时 SQL 语法不正确
【发布时间】:2018-12-25 06:31:23
【问题描述】:

运行此代码时:

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”附近的语法不正确。

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

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

提前致谢!

【问题讨论】:

  • execute(@query) 之前添加PRINT @query 并检查结果查询

标签: sql-server tsql pivot dynamic-sql


【解决方案1】:

您能否将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,可以查看组合查询。

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 2012-07-20
    • 2020-08-18
    • 1970-01-01
    • 2021-01-19
    • 2012-12-28
    • 1970-01-01
    相关资源
    最近更新 更多