PIVOT不起作用,附近有')'的语法错误。

5

T-SQL 代码:

SELECT iCarrierInvoiceDetailsID, [1],[2],[3]
FROM [GroundEDI].[dbo].[tblCarrierInvoiceDetails]
PIVOT(MAX(dTotalCharge) FOR iCarrierInvoiceHeaderID IN ([1],[2],[3]))AS P

错误:

消息102,级别15,状态1,第3行
附近有括号不正确。

你知道我为什么会收到这个错误吗?


我没有收到任何语法错误。 - Saravana Kumar
看起来没问题;你在出现错误时使用的确切代码是这个吗? - jpw
看起来运行得很好:http://sqlfiddle.com/#!3/c84a29/2 - James Z
当我在我的SSMS中尝试这个 -> 我没有收到任何错误信息!你确定是来自这个命令吗? - CeOnSql
你确定在点击执行时选中了整个语句吗?我经常会犯一个愚蠢的错误,就是当我有一个打开多个语句的窗口时,忘记在行末选择一个)。对我来说似乎也没问题。 - Random Developer
显示剩余2条评论
1个回答

4

看起来你试图直接从表本身选择枢轴列而不是枢轴。你需要像这样做:

SELECT p.[1],p.[2],p.[3] 
FROM 
(SELECT iCarrierInvoiceHeaderID
       ,dTotalCharge
FROM [GroundEDI].[dbo].[tblCarrierInvoiceDetails]) t
PIVOT(MAX(dTotalCharge) FOR iCarrierInvoiceHeaderID IN ([1],[2],[3])
)AS P;

看起来它能工作,但现在我遇到了兼容性问题。Msg 325,级别15,状态1,行6 'PIVOT'附近的语法不正确。您可能需要将当前数据库的兼容性级别设置为更高的值以启用此功能。请参阅ALTER DATABASE的SET COMPATIBILITY_LEVEL选项的帮助文档。 - bones
很奇怪,另一个不起作用。我是按照70-461培训套件书的方式制作的。 - bones
据我所知,我认为你不能像上面那样直接从表中选择您的枢轴列([1],[2],[3])。由于这些是您的iCarrierInvoiceHeaderID列中的值,因此在选择它们之前需要对它们进行透视。也许我不知道是否可能像您现在这样直接从表中选择。至于兼容性级别,请查看此链接https://dev59.com/LHvaa4cB1Zd3GeqPKPoD - FutbolFan
如果您觉得这个答案有帮助并回答了您的问题,请随意将其标记为“接受的答案”。这也会鼓励其他人在未来回答您的问题。谢谢! - FutbolFan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接