【发布时间】:2014-12-30 13:55:14
【问题描述】:
我有一个每天检索预测的 SQL 查询。如果给定的“LP”缺少预测,我想根据其他预测进行计算。但是,使用下面的代码,它不会在预测缺失时计算预测。
agreementStart、agreementEnd 和 plantType 属于 tbl_p。我尝试将所有内容移至 ON 部分,但随后包含了其他不应该存在的行,并且仍然没有计算缺失值。在当前示例中,缺少的行包含在结果集中,但字段 hour00_01、hour01_02、hour02_03 保持为空,因为它们没有被计算。这些列的计算应该是,如果 id 1 的 hour00_01 为 1,id 2 的 hour00_01 为 2,id 3 的 hour00_01 为空,则 id 3 的 id hour00_01 应该是 3(id 1 和 2 的总和) .
谁能在这里指出我正确的方向:
declare @startDt date = '2014-12-19' declare @endDt date = '2014-12-19' ; with AllDates as
( select @startDt as dt union all select dateadd(day, 1, dt)
from AllDates where dateadd(day, 1, dt) <= @endDt )
select dt, m.date, p.lp, p.electricityArea, maxCapacity, SUM(maxCapacity) as c, p.netArea,
CASE hour00_01 WHEN null THEN maxCapacity*(sum(hour00_01)/sum(maxCapacity)) ELSE hour00_01 END hour00_01,
CASE hour01_02 WHEN null THEN maxCapacity*(sum(hour01_02)/sum(maxCapacity)) ELSE hour01_02 END hour01_02,
CASE hour02_03 WHEN null THEN maxCapacity*(sum(hour02_03)/sum(maxCapacity)) ELSE hour02_03 END hour02_03
from AllDates ad cross join tbl_p p LEFT JOIN tbl_m m
on p.lp = m.lp and m.date = ad.dt and m.inputType = 'TYPE' where p.plantType = '2' AND (agreementStart <= '2014-12-19' AND agreementEnd >= '2014-12-19')
GROUP BY
ad.dt,
m.date,
p.lp,
p.electricityArea,
maxCapacity,
p.netArea,
p.electricityArea,
hour00_01, hour01_02, hour02_03
【问题讨论】:
标签: sql missing-data