SQL在查询中包含零行

SQL在查询中包含零行,sql,sql-server,tsql,Sql,Sql Server,Tsql,我从一个大得多的表中派生了一个包含类别、子类别、日期、时间和值列的表 这些日期都是具有特定属性的日期,有时持续5周,有时持续5个星期日,有时每月到一天,有时每小时午夜到现在,有时每2分钟持续30分钟 类别和子类别是无趣的,但是如果它们在时间参数的值字段中没有条目,它们将被完全忽略,这很好 当没有与其他列的组合相匹配的值时,将完全忽略该行 我的问题是我需要包含0。有什么方法可以将0填入表的其余部分吗 我的想法是只使用前4列对表本身进行交叉连接,然后在值列上使用isnull进行左连接。但是交叉连接仍

我从一个大得多的表中派生了一个包含类别、子类别、日期、时间和值列的表

这些日期都是具有特定属性的日期,有时持续5周,有时持续5个星期日,有时每月到一天,有时每小时午夜到现在,有时每2分钟持续30分钟

类别和子类别是无趣的,但是如果它们在时间参数的值字段中没有条目,它们将被完全忽略,这很好

当没有与其他列的组合相匹配的值时,将完全忽略该行

我的问题是我需要包含0。有什么方法可以将0填入表的其余部分吗


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

如果我理解正确,您需要查询返回的日期、时间、类别和子类别的所有组合。如果是这样,可以使用交叉连接来获取组合,然后使用左外连接来填充值或0:


你能发布一些输入和输出示例吗?你的问题有点难理解:它们完全被忽略了,这很好,而我的问题是我需要包含0。是哪一个?包括还是忽略?样本数据和期望的结果将非常有用。谢谢。我会尝试一下,如果可以的话,再填上更多的细节。这很有效,但大约需要一分钟。我想知道如何在没有时间问题的情况下获得相同的功能。@user38858。如果可以将查询放入临时表或表变量中,可能会加快查询速度。这正是我所做的。当我把时间和类别区分开来的时候,总是要花很长时间;直到我把分类的东西放进临时表格。我不知道为什么,但它似乎有效。@user38858。您可以尝试在表上构建三个索引,一个用于日期,一个用于时间,一个用于类别和子类别,用于性能。
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;