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
)
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 ;
面倒ですが、TeradataはビューでのCTEをサポートしていません(15.00以降)。 SQLデータ操作言語> SELECTステートメント> WITHおよびWITH RECURSIVEステートメント修飾子 を参照してください。
あなたのケースでは、CTEのコンテンツを使用して別のビューを作成できますが、おそらくすでに知っています。