J'essaie d'une vue avec la clause "avec" dans Teradata, mais il ne permet pas de créer une vue. S'il vous plaît suggérer avec toutes les options.
Donné ci-dessous est la requête que j'ai essayée:
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
)
Comme Nickolay a expliqué dans sa réponse, WITH
n'est pas autorisé dans une définition de vue à Teradata.
Vous pouvez contourner le problème spécifique en utilisant une table dérivée à la place. Vous pouvez le spécifier deux fois, en gardant le union
de votre requête:
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 ;
ou même plus simple:
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 ;
Mais il n'est pas nécessaire d'être spécifié deux fois. Vous pouvez le rejoindre à une autre table dérivée de 2 rangs et utilisez case
dans l'expression de colonne:
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 ;
C'est une douleur, mais Teradata ne prend pas en charge CTE sous Vues (à partir de 15,00), voir Langue de manipulation de données SQL> L'instruction SELECT> avec et avec des modificateurs de relevés récursifs .
Dans votre cas, vous pouvez créer une autre vue avec le contenu de la CTE, mais vous le savez probablement déjà.