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"