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 命令未正确结束