我的查询提取这样的数据:
BSYY CCF
2001 .5
2003 .8
2007 .9
我想为不存在 CCF 值的年份创建值“0”,因此它看起来像:
BSYY CCF
2001 .5
2002 0
2003 .8
2004 0
2005 0
2006 0
2007 .9
问题是,我没有“创建”或“插入”的权限......有没有办法在不创建临时表的情况下做到这一点?
你当然可以用 SQL 做到这一点,特别是如果你有一个可以提供所有年份的表。这是一个示例,展示了如何通过生成表来做到这一点:
with
t (bsyy, ccf) as (values (2001, 0.5),(2003,0.8),(2007,0.9))
,y (year) as (values (2000),(2001),(2002),(2003),(2004),
(2005),(2006),(2007),(2008),(2009))
select
y.year
,coalesce(t.ccf,0.0) as ccf
from
y
left outer join t on y.year = t.bsyy
order by
y.year;
您将t
用您的实际源表替换公用表表达式。例如,如果您有一个名为的表,其中包含和tab1
列,则查询将是:bsyy
ccf
with
y (year) as (values (2000),(2001),(2002),(2003),(2004),
(2005),(2006),(2007),(2008),(2009))
select
y.year
,coalesce(t.ccf,0.0) as ccf
from
y
left outer join tab1 t
on y.year = t.bsyy
order by
y.year;
y
您可以使用递归表达式为您生成这些值,而不是硬编码公用表表达式的值。
但是,为什么要强制 DBMS 这样做呢?为什么不只在应用程序级别做呢?