db2 在创建表的同时在create语句中创建和使用列

2g32fytz  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(159)

我想创建一个从源表中获取数据的表。我可以使用alter和update函数来完成,但我不想这样做。
我必须创建两个列,并在第二个(c2)列中使用其他case语句中的1列(c1)。

insert into table t
(select 

a,b, case when d>f then 1 else 0 end as c1,
case when c1=1  then "yes" else null end as c2,

from base_temp 
where a>b
)
xlpyo6sf

xlpyo6sf1#

如果问题是如何创建一个表并使用某个SELECT语句的结果填充它,那么请查看CREATE TABLEas-result-table语法。
您可以使用AS (full-select) WITH DATA语法根据提供的查询创建一个带有元数据的新表,同时将此查询的结果插入此表中。
如果问题是关于如何在表达式中使用列别名,请参阅Expressions refer to column aliases主题。
必须在会话中将SQL_COMPAT全局变量设置为'NPS'值才能使其正常工作。
您可以在执行Map的SELECT陈述式之前,使用SET SQL_COMPAT = 'NPS'陈述式来设定它。

SET SQL_COMPAT='NPS';

SELECT 
  TABSCHEMA, TABNAME
, CASE WHEN COLCOUNT > 20 THEN 1 ELSE 0 END AS C1
, CASE WHEN C1 = 1 THEN 'YES' ELSE NULL END AS C2
FROM SYSCAT.TABLES
FETCH FIRST 5 ROWS ONLY;

如果你不能或不想设置这个变量,你可以使用sub-select来达到同样的效果:

SELECT
  TABSCHEMA, TABNAME
, C1
, CASE WHEN C1 = 1 THEN 'YES' ELSE NULL END AS C2
FROM
(
SELECT 
  TABSCHEMA, TABNAME
, CASE WHEN COLCOUNT > 20 THEN 1 ELSE 0 END AS C1
FROM SYSCAT.TABLES
FETCH FIRST 5 ROWS ONLY
);

相关问题