我派生了一个包含类别,子类别,日期,时间和值列的表(来自更大的表)。
日期是具有特定属性的所有日期(有时持续5周,有时持续5个星期日,有时是每月),与时间一样(有时是午夜到现在每小时,有时每2分钟持续30分钟)。
类别和子类别不感兴趣,但如果时间参数的值字段中没有条目,则它们将被完全忽略(这很好)。
如果没有与其他列的组合匹配的值,则完全忽略该行。
我的问题是我需要包含0。有没有什么办法可以填写0表到桌子的其他部分?
我的想法是仅使用前4列对表进行交叉连接,然后在值列上使用isnull()进行连接。但是交叉连接仍然包括第5列。
答案 0 :(得分:1)
如果我理解正确,您需要查询返回的date
,time
,category
和subcategory
的所有组合。如果是,您可以使用cross join
获取组合,然后使用left outer join
填写值0
:
with t as (
<your query here>
)
select d.date, ti.time, sc.category, sc.subcategory, coalesce(t.value, 0) as value
from (select distinct date from t) d cross join
(select distinct time from t) ti cross join
(select distinct category, subcategory from t) sc left outer join
t
on t.date = d.date and t.time = ti.time and
t.category = sc.category and t.subcategory = sc.subcategory;