我正在使用SQL Server 2008R2对T-SQL数据库Northwind进行一些培训。
我正在尝试使用下面的查询来转移某些数据,但它会一直返回以下错误:
消息156,级别15,状态1,行1关键字附近的语法不正确 “用”。消息170,级别15,状态1,行16行16:语法不正确 靠近'('。
WITH PivotData AS
(
SELECT
[OrderID],
[CustomerID],
[Freight]
FROM [Northwind].[dbo].[Orders]
)
SELECT
[OrderID],
[10248],
[10249],
[10250]
FROM PivotData
PIVOT( SUM(Freight) FOR [CustomerID] IN ([10248],[10249],[10250])) AS P
最诚挚的问候,
丹
答案 0 :(得分:0)
在CTE声明之前必须用分号;
完成
或前缀CTE,带有相同的分号,例如
;with ctePivotData as
...
答案 1 :(得分:0)
您发布的代码工作正常,听起来您的数据库来自较旧的源并且运行在旧的兼容性级别(因此不支持PIVOT语法)。
运行以下SQL并再试一次:
ALTER DATABASE [Northwind] SET COMPATABILITY_LEVEL 100
答案 2 :(得分:0)
我刚刚在SQL Server 2008 R2实例上运行它没有问题。
SELECT @@VERSION;
结果:
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
Jun 28 2012 08:36:30
Copyright (c) Microsoft Corporation
Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
脚本:
CREATE TABLE #orders(OrderId INT, CustomerId INT, Freight DECIMAL(28,2));
INSERT INTO #orders(OrderId,CustomerId,Freight)VALUES
(1,10248,1.22),(1,10249,1.5),(1,10248,.25),(1,10250,.75);
WITH PivotData AS
(
SELECT
[OrderID],
[CustomerID],
[Freight]
FROM #Orders
)
SELECT
[OrderID],
[10248],
[10249],
[10250]
FROM PivotData
PIVOT( SUM(Freight) FOR [CustomerID] IN ([10248],[10249],[10250])) AS P;
DROP TABLE #orders;
结果(没有错误):
+---------+-------+-------+-------+
| OrderID | 10248 | 10249 | 10250 |
+---------+-------+-------+-------+
| 1 | 1.47 | 1.50 | 0.75 |
+---------+-------+-------+-------+
PS:我认为WITH
之前的语句并不以您的分号结尾,或者您正在使用SSMS 2008 R2在SQL Server 2000实例上运行SQL语句。