web-dev-qa-db-fra.com

Teradata vue avec la syntaxe "avec clause"

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
)
2
user61411

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 ;
1
ypercubeᵀᴹ

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à.

1
Nickolay