在SQL Server中使用UNPIVOT时出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在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(我认为您可以通过使用子查询来解决您的问题)。

以上是关于在SQL Server中使用UNPIVOT时出错的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008 中的 PIVOT / UNPIVOT

如何在不使用pivot和unpivot的情况下在SQL Server中水平显示数据?

在 SQL Server 2008 中使用 Unpivot 或 Cross Apply 规范化数据

SQL Server中行列转换 Pivot UnPivot

SQL Server中行列转换 Pivot UnPivot

SQL Server 使用 Pivot 和 UnPivot 实现行列转换