希望你能帮助解决这个问题。
我有一个在系统上运行的能源管理软件。记录的数据是总值,记录在Value列中。这是每小时完成的。沿着一些其他数据,这里是一个名为Day
的布尔值和一个名为Active
的整数。
我想要的是一个查询,它可以获得一个排序天数列表,一天的总功率以及当天的峰值功率。
使用Active
存在的值的最大值/最小值来计算峰值功率使用情况。但是,有一天,SELECT
A.Day, A.Forbrug, B.Peak
FROM
(SELECT
Day, Max(Value) - Min(Value) AS Forbrug
FROM
EL_HT1_K
WHERE
MONTH = 8 AND YEAR = 2016
GROUP By Day) A,
(SELECT
Day, Max(Value) - Min(Value) AS Peak
FROM
EL_HT1_K
WHERE
Month = 8 AND Year = 2016 AND Active = 1
GROUP BY Day) B
WHERE
A.Day = B.Day
位没有设置,单独此查询的结果将产生NULL。
这是我的疑问:
NC_011163.1:1
NC_011163.1:22
NC_011163.1:44
NC_011163.1:65
NC_011163.1:73
NC_011163.1:87
NC_011163.1:104
NC_011163.1:130
NC_011163.1:151
NC_011163.1:172
NC_011163.1:194
NC_011163.1:210
NC_011163.1:235
NC_011163.1:255
NC_011163.1:295
NC_011163.1:320
NC_011163.1:445
NC_011163.1:520
仅返回查询B(峰值使用)产生结果的结果。 我想要的是,内部查询A的其余结果仍然显示,即使查询B在那一天产生0 / null。
这可能,以及如何?
FYI。我需要在一个查询中使用它的原因是scada系统在处理多个查询时遇到一些困难。
答案 0 :(得分:0)
我认为你只想要条件聚合。根据您的描述,这似乎是您想要的查询:
SELECT Day, SUM(Value) as total,
MAX(CASE WHEN Active = 1 THEN Value END) as Peak,
FROM EL_HT1_K
WHERE Month = 8 AND Year = 2016
GROUP BY Day;