Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL数据透视不工作_Sql_Sql Server_Sql Server 2008 R2_Pivot - Fatal编程技术网

T-SQL数据透视不工作

T-SQL数据透视不工作,sql,sql-server,sql-server-2008-r2,pivot,Sql,Sql Server,Sql Server 2008 R2,Pivot,我正在使用SQL Server 2008R2对T-SQL数据库Northwind进行一些培训 我尝试使用下面的查询透视某些数据,但它不断返回以下错误: 消息156,级别15,状态1,第1行关键字附近语法不正确 “有”。Msg 170,级别15,状态1,第16行第16行:语法不正确 在“(”附近 致以最良好的祝愿 CTE语句之前的Dan必须以分号结尾。; 或在CTE前面加上相同的分号,例如 ;with ctePivotData as ... 您发布的代码工作正常,听起来您的数据库来自较旧的源代码

我正在使用SQL Server 2008R2对T-SQL数据库Northwind进行一些培训

我尝试使用下面的查询透视某些数据,但它不断返回以下错误:

消息156,级别15,状态1,第1行关键字附近语法不正确 “有”。Msg 170,级别15,状态1,第16行第16行:语法不正确 在“(”附近

致以最良好的祝愿


CTE语句之前的Dan必须以分号结尾。


或在CTE前面加上相同的分号,例如

;with ctePivotData as
...

您发布的代码工作正常,听起来您的数据库来自较旧的源代码,并且运行在旧的兼容级别(因此不支持PIVOT语法)

运行以下SQL并重试:

ALTER DATABASE [Northwind] SET COMPATABILITY_LEVEL 100

有关更多详细信息,请参阅。还有一篇文章将向您展示如何在GUI中执行此操作

我刚刚在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)
结果(无错误):



PS:我想在你的例子中,
前面的语句不会以分号结尾,或者你正在使用SSMS 2008 R2在SQL Server 2000实例上运行SQL语句。

你的SQL Server版本是什么?嗨,Madhivanan,版本是2008R2,你的查询是更大查询的一部分吗?如果是的话,你能发布整个代码吗?不,只是t他的一个,只是测试pivot功能。如果您在运行此查询的数据库上执行此操作,请选择
select@@VERSION
,它会返回什么?您是在SSMS窗口中运行此脚本还是从某个应用程序中运行此脚本?它应该可以工作。除非有其他情况。嗨,Ivan,检查下面的Jamie答案,我想他可能没有他不知道为什么会被否决。虽然这可能不是本例中的答案,但这很容易是问题中错误消息的最常见原因。嗨,杰米,你说的很有道理,因为查询似乎是正确的,无论如何,我不会简化应用更改,因为我正在工作数据库接受培训,不想好的,你能备份并创建一个开发数据库吗?Jamie顺便说一句,这个更改会影响其他数据库或服务器吗?我建议先检查一下你的实际兼容性级别,并找出为什么它被设置为当前值(来自DBA或像他这样的人)是的,我觉得更好,我会晚些时候在家里尝试这个查询,然后把结果发布在这里,谢谢大家
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  |
+---------+-------+-------+-------+