SQL在查询中包含零行

时间:2014-08-15 15:47:00

标签: sql sql-server tsql

我派生了一个包含类别,子类别,日期,时间和值列的表(来自更大的表)。

日期是具有特定属性的所有日期(有时持续5周,有时持续5个星期日,有时是每月),与时间一样(有时是午夜到现在每小时,有时每2分钟持续30分钟)。

类别和子类别不感兴趣,但如果时间参数的值字段中没有条目,则它们将被完全忽略(这很好)。

如果没有与其他列的组合匹配的值,则完全忽略该行。

我的问题是我需要包含0。有没有什么办法可以填写0表到桌子的其他部分?

我的想法是仅使用前4列对表进行交叉连接,然后在值列上使用isnull()进行连接。但是交叉连接仍然包括第5列。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您需要查询返回的datetimecategorysubcategory的所有组合。如果是,您可以使用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;