0

我的查询提取这样的数据:

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

问题是,我没有“创建”或“插入”的权限......有没有办法在不创建临时表的情况下做到这一点?

4

1 回答 1

0

你当然可以用 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列,则查询将是:bsyyccf

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 这样做呢?为什么不只在应用程序级别做呢?

于 2013-09-24T17:33:46.430 回答