web-dev-qa-db-ja.com

「With句」構文を使用したTeradataビュー

Teradataで「With」句を使用してビューを作成しようとしていますが、ビューを作成できません。任意のオプションで提案してください。

以下は私が試したクエリです:

create view derived_table(derived_column)
AS
(
  With temp_table(a,b,c)
  As 
  (select a,b,c from table_a where column1=column2)
select (a||'-'||b) as derived_column  from  temp_table
union all
select (a||'-'||b||'-'||C) as derived_column from  temp_table
)
2
user61411

Nickolayが彼の回答で説明したように、WITHはTeradataのビュー定義では許可されていません。

代わりに派生テーブルを使用して、特定の問題を回避できます。クエリのunionを維持して、2回指定することもできます。

create view derived_table (derived_column)
as
  select (a||'-'||b) as derived_column  
  from
      (select a,b,c from table_a where column1 = column2) as t
  union all
  select (a||'-'||b||'-'||c)  
  from
      (select a,b,c from table_a where column1 = column2) as t ;

またはさらに簡単:

create view derived_table (derived_column)
as
  select (a||'-'||b) as derived_column  
  from table_a where column1 = column2
  union all
  select (a||'-'||b||'-'||c)  
  from table_a where column1 = column2 ;

ただし、2回指定する必要はありません。これを別の2行の派生テーブルに結合し、列式でcaseを使用できます。

create view derived_table (derived_column)
as
  select case opt.o when 1 then (a||'-'||b)
                    when 2 then (a||'-'||b||'-'||c)
         end as derived_column  
  from
      (select a,b,c from table_a where column1 = column2)
        as t
    cross join
      (select 1 as o union all select 2)
        as opt ;
1
ypercubeᵀᴹ

面倒ですが、TeradataはビューでのCTEをサポートしていません(15.00以降)。 SQLデータ操作言語> SELECTステートメント> WITHおよびWITH RECURSIVEステートメント修飾子 を参照してください。

あなたのケースでは、CTEのコンテンツを使用して別のビューを作成できますが、おそらくすでに知っています。

1
Nickolay