在 SQL 服务器中使用 UNPIVOT 时出错
Error when using UNPIVOT in SQL Server
我有以下查询:
SELECT STDEV(Value) as Value, TimeOfTest as Date
FROM myTable
unpivot
(
value
for col in (WS1, WS2, WS3, WS4, WS5, WS6, WS7, WS8, WS9, WS10, WS11,
WS12, WS13, WS14, WS15, WS16, WS17, WS18, WS19, WS20)
) un
GROUP BY TimeOfTest
ORDER BY TimeOfTest DESC
但我收到 SQL 服务器 2008 错误:关键字 'FOR'
附近的语法不正确
有谁知道原因吗?语法看起来正确。
只需使用APPLY
。
SELECT t.TimeOfTest, STDEV(ws) as Value
FROM myTable t CROSS APPLY(
(VALUES (WS1), (WS2), . . . (WS20)) v(ws)
GROUP BY t.TimeOfTest
ORDER BY t.TimeOfTest DESC;
APPLY
实现了一个叫做 "lateral join" 的东西。这是一个非常强大的(和 ANSI 标准的)结构,可以用于除旋转之外的许多事情。另一方面,unpivot
是一种非常特殊的语法,仅用于一个目的。 . .正如您所发现的,其他结构可能无法正常工作,例如 GROUP BY
(我认为您可以通过使用子查询来解决您的问题)。
我有以下查询:
SELECT STDEV(Value) as Value, TimeOfTest as Date
FROM myTable
unpivot
(
value
for col in (WS1, WS2, WS3, WS4, WS5, WS6, WS7, WS8, WS9, WS10, WS11,
WS12, WS13, WS14, WS15, WS16, WS17, WS18, WS19, WS20)
) un
GROUP BY TimeOfTest
ORDER BY TimeOfTest DESC
但我收到 SQL 服务器 2008 错误:关键字 'FOR'
附近的语法不正确有谁知道原因吗?语法看起来正确。
只需使用APPLY
。
SELECT t.TimeOfTest, STDEV(ws) as Value
FROM myTable t CROSS APPLY(
(VALUES (WS1), (WS2), . . . (WS20)) v(ws)
GROUP BY t.TimeOfTest
ORDER BY t.TimeOfTest DESC;
APPLY
实现了一个叫做 "lateral join" 的东西。这是一个非常强大的(和 ANSI 标准的)结构,可以用于除旋转之外的许多事情。另一方面,unpivot
是一种非常特殊的语法,仅用于一个目的。 . .正如您所发现的,其他结构可能无法正常工作,例如 GROUP BY
(我认为您可以通过使用子查询来解决您的问题)。