Pivot 中的 SQL 转换

Posted

技术标签:

【中文标题】Pivot 中的 SQL 转换【英文标题】:SQL Convert in Pivot 【发布时间】:2014-03-06 18:30:52 【问题描述】:

我有一个大的长视图查询,我正在尝试创建如下:

CREATE VIEW [iFix].[UF90NIRHistorian]
    AS
    SELECT 
        PARSENAME(TagName,2)            As [TagName],
        CONVERT(DATETIME,[TimeStamp])   As [TimeStamp], 
        CONVERT(FLOAT,Value)            As [Value]
    FROM OPENQUERY(IFIX_HISTORIAN, 
    '
    SET
        StartTime=ts ''2014-02-06 00:00:00'',
        SamplingMode=Calculated,
        CalculationMode=Average,
        IntervalMilliseconds=1Hour,
        RowCount=0
    SELECT * FROM ihRawData WHERE 
        TagName LIKE *.UF90n_TS_SP.F_CV OR
        TagName LIKE *.UF90n_DMB_SP.F_CV OR
        TagName LIKE *.SW_U680_01.F_CV OR
        TagName LIKE *.PD_U680_01.F_CV OR
        TagName LIKE *.FW_U680_01.F_CV
    ')
    PIVOT(
        AVG(CONVERT(FLOAT,Value) As Value)
        FOR [TagName] In (
            [UF90n_DMB_SP],
            [UF90N_TS_SP],
            [SW_U680_01],
            [PD_U680_01],
            [FW_U680_01])
        ) AS p 

当我尝试将 Value 列从字符串转换为浮点数时,在 PIVOT 命令之后的行上出现语法错误。如果我在没有枢轴的情况下创建视图,然后将其结果作为第二个视图进行枢轴,则此错误就会消失。有什么方法可以将其保留为一个视图并修复该语法错误?

【问题讨论】:

你真的可以发布错误信息吗? 你不能在那个地方应用convert (AVG(CONVERT(FLOAT,Value) As Value))。您必须在应用avg() 之前转换数据。 错误信息是:关键字'CONVERT'附近的语法不正确。 【参考方案1】:

如果您在选择中转换值字段,那么为什么需要在数据透视语句中再次转换它?我用我的一个表尝试了一个类似的 pivot 语句,在将选定的值转换为不同的类型然后对其进行旋转后它工作正常。也许我遗漏了一些东西,但似乎不需要您的第二次转换。

【讨论】:

如果没有转换,我会收到一条错误消息,说我无法平均 varchar。我还尝试在 select 语句中将列重命名为不同的名称,但我收到一条错误消息,提示找不到该列。

以上是关于Pivot 中的 SQL 转换的主要内容,如果未能解决你的问题,请参考以下文章

Sql PIVOT,如何使用 PIVOT 将结果中的 NULL 转换为值 0

SQL 中的 PIVOT 给出错误 - ORA-00933: SQL 命令未正确结束

在 SQL 中使用“Pivot”将行转换为列

SQL Server中行列转换 Pivot UnPivot

SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句

SQL Server中行列转换 Pivot UnPivot