SQL查询获取多个where-claused别名

时间:2016-08-18 12:03:50

标签: sql

希望你能帮助解决这个问题。

我有一个在系统上运行的能源管理软件。记录的数据是总值,记录在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系统在处理多个查询时遇到一些困难。

1 个答案:

答案 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;