Sql查询选择并用零填充结果(如果不存在)

Sql查询选择并用零填充结果(如果不存在),sql,select,zero,Sql,Select,Zero,嗨,伙计们,我需要你们的帮助 这是我的表中的数据,称为“表”: **key** | **index** | **value** a | 201308 | 23 b | 201308 | 9 a | 201309 | 5 c | 201310 | 3 这是我的选择尝试: Select * from Table where index between 201308

嗨,伙计们,我需要你们的帮助

这是我的表中的数据,称为“表”:

**key** |    **index**  |   **value**

  a     |    201308     |   23
  b     |    201308     |   9
  a     |    201309     |   5
  c     |    201310     |   3
这是我的选择尝试:

Select * from Table where index between 201308 and 201310     
所以我需要这样一个结果,如果表中不存在键的日期,则用零值填充索引:

**key** |    **index**  |   **value**

  a     |    201308     |   23
  a     |    201309     |   5
  a     |    201310     |   0
  b     |    201308     |   9
  b     |    201309     |   0
  b     |    201310     |   0 
  c     |    201308     |   0
  c     |    201309     |   0
  c     |    201310     |   3 
对我来说,最好的方法或结果应该是这样:

您可以通过创建所有可能组合的“驱动程序”表来实现这一点。以下查询使用显式的
交叉联接来执行此操作:

select driver."key", driver."index", coalesce(t.value, 0) as value
from (select k."key", i."index"
      from (select distinct "key" from "table" ) k cross join
           (select distinct "index" from "table") i
     ) driver left outer join
     "table" t 
     on driver."key"= t."key" and driver."index" = t."index"

我不知道为什么,但我没有得到预期的结果你得到了什么结果?
select driver."key", driver."index", coalesce(t.value, 0) as value
from (select k."key", i."index"
      from (select distinct "key" from "table" ) k cross join
           (select distinct "index" from "table") i
     ) driver left outer join
     "table" t 
     on driver."key"= t."key" and driver."index" = t."index"