sql db2-如何使用“select”添加/创建行
我的查询提取如下数据:sql db2-如何使用“select”添加/创建行,select,db2,row,dql,Select,Db2,Row,Dql,我的查询提取如下数据: 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来实现这一点,特别是如果您有一个可以提供所有年份的表的话。下面是一个示例,演示如何通过生成表来执行此操作: w
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这样做呢?为什么不在应用程序级别执行此操作?您需要的年份范围有多大?@mustaccio它从2001年到2010年谢谢!但是,我有一个问题。。实际上,我的表有5列BSYY、CCF、CLIENT_TYPE、PRODUCT_SEGMENT、PRODUCT_COUNT,要手动将所有值输入到表“t”中,需要花费很长时间,如您在回答中所述。对不起,我应该在原来的问题中说明这一点。有没有一种方法可以做到这一点,而不必输入表“t”的每个结果值?我强迫DBMS这样做,而不是应用程序,因为这种类型的表大约有40个,我想知道,如果不在Excel中组织数据,我是否可以这样拉取数据,这样我就不必在Excel中编辑它。我可以用Excel中的if&vlookup语句制作一个模板,但我想知道是否可以直接从DBMS中提取这种格式的数据。。节省一步@user2810030正如我在回答中提到的,您可以用正在查询的实际表替换t公共表表达式。在我上面的代码中,t只是用来保存示例数据。对不起,如果不指定值,第一行的语法是什么?@user2810030用第二个示例更新了答案。