1

对 SQL 非常陌生,可以使用一些建议/想法。

我正在使用 SQL 查询从现有表(Wonderware/Runtime/AnalogSummaryHistory)中检索和格式化数据到 Excel 2010 中。我的查询适用于获取我想要的结果格式,但仅适用于单个/通用聚合函数。我无法弄清楚如何将单独的聚合函数与每个感兴趣的标签相关联。

我想为以下功能增强它。

我想定义一个列表,(硬编码很好,从 Excel 单元格范围中提取的动态列表会更有技巧),

标签 --> (Tag1, Tag2,...)

Func---------> (AggType1, AggType2,...)

其中 AggTypeX 将是我想要的相应 TagX 的聚合函数类型(MIN/MAX/AVG/LAST 等,可用作现有源表中的列数据)(定义列表中的 AggTypes 可以重复)然后我想拥有查询通过此列表运行以创建具有相应聚合函数类型数据值的 TagX 列的结果。我希望结果列按照初始标签列表中定义的顺序排列为 LR。

此外,我希望能够在 Excel 2010 连接定义中运行此查询。*我尝试使用临时表构建原始查询,但无法在 Excel 中运行。似乎在插入时炸弹以填充临时表。可能是我经验不足,可能是Excel,DK的限制。

我正在寻找的结果:

ShortDate    | Tag1              | Tag2
-------------------------------------------------------------------
Date1        | Tag1Date1Agg1Val  | Tag2Date1Agg2Val
Date2        | Tag1Date2Agg1Val  | Tag2Date2Agg2Val

非常感谢任何反馈。

我当前的查询/设置:

现有表(AnalogSummaryHistory):

StartDateTime | TagName | Aggregate (ex. LAST)
--------------------------------------------------------------
Date1         | Tag1    | Tag1Date1AggVal
Date2         | Tag1    | Tag1Date2AggVal
Date1         | Tag2    | Tag2Date1AggVal
Date2         | Tag2    | Tag2Date2AggVal

我的查询:

select * from
(
SELECT top 100 percent convert(varchar(10), StartDateTime, 101) as ShortDate, TagName, Last
FROM AnalogSummaryHistory
WHERE TagName IN ('Tag1','Tag2')
AND wwVersion = 'Latest'
AND wwRetrievalMode = 'Cyclic'
AND wwResolution=24*60*60*1000
AND StartDateTime >= '20171001 00:00:00.000'
AND EndDateTime <= '20171101 00:00:00.000'
)x
pivot
(
max(Last)
for Tagname in ([Tag1],[Tag2])
) pvt

结果:

ShortDate | Tag1             | Tag2
--------------------------------------------------------------
Date1     | Tag1Date1AggVal  | Tag2Date1AggVal
Date2     | Tag1Date2AggVal  | Tag2Date2AggVal
4

0 回答 0