sql - 在 SQL Server 中使用 UNPIVOT 时出错
问题描述
我有以下查询:
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 Server 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
实现称为“横向连接”的东西。这是一个非常强大(和 ANSI 标准)的构造,它可以用于除反透视之外的许多事情。另一方面,unpivot
是非常具体的语法,仅用于一个目的。. . 正如您所发现的,其他结构可能无法正常工作,例如GROUP BY
(我认为您可以通过使用子查询来解决您的问题)。
推荐阅读
- c - 如何在 C 中解析
- java - Java 密码锁程序
- php - 为什么查询在 mysql 中有效,prepare 语句有效,但 bind_param 无效?
- c# - 如何在 ASP.NET CORE 中为多个策略创建自定义授权属性
- field - 对于 Jira Server,如何访问或准备 OrderableField 和 CustomField 对象的 FieldMetaBean 对象
- sql - sql server 2012中这两个查询有什么区别
- javascript - 使用 Chrome 扩展中的 Javascript 将文本插入页面上的任意类似文本框的元素(不一定是简单的 HTML)
- svn - SVN 在合并时将文件显示为冲突,即使两个分支中的文件相同
- ruby-on-rails - Turbolinks 内容重新加载加载页面两次
- jquery - Only execute function when screen size is above 992