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
,可以检查组合查询。
当运行这段代码时:
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
,可以检查组合查询。