2009-08-28 12 views
4

J'ai un scénario dans l'oracle où je dois être en mesure de réutiliser la valeur d'une colonne de pseudo qui a été calculé précédemment dans le même instruction select quelque chose comme:Oracle: En utilisant la valeur de la colonne pseudo dans la même instruction Select

select 'output1' process, process || '-Output2' from Table1 

Je ne veux pas la répétition à nouveau la première logique de colonnes dans la deuxième colonne à des fins d'entretien, il est actuellement fait comme

select 'output1' process, 'output1' || '-Output2' name from Table1 

depuis que j'ai 4 ces colonnes qui dépendent de la sortie précédente de la colonne, répéter serait un cauchemar d'entretien

Edit: i inclus nom de la table et retiré double, de sorte qu'aucune des hypothèses sont faites au sujet que ce n'est pas un processus complexe, ma déclaration réelle ne dispose de 2 à 3 jointures sur des tables différentes

+0

Malheureusement, vous ne pouvez pas réutiliser les colonnes calculées dans le même cadre. Cela peut sembler un peu exagéré, mais des sous-requêtes pondérées ou des vues en ligne telles que suggérées par Adam Paynter vont forcer le calcul à se produire à un niveau différent, ce qui signifie que vous pouvez réutiliser les résultats. –

Répondre

9

Vous pouvez calculer la valeur dans une sous-requête:

select calculated_output process, calculated_output || '-Output2' name from 
(
    select 'output1' calculated_output from dual 
) 
9

Vous pouvez également utiliser la syntaxe d'affacturage de sous-requête - je pense qu'il est plus lisible moi-même:

with tmp as 
( 
    select 'output' process from dual 
) 
select 
    process, process || '-Output2' from tmp; 
+0

J'ai tendance à oublier que la syntaxe 'WITH' existe réellement. :) –

+0

Le seul inconvénient possible est que (en fonction de la version Oracle) la requête WITH sera exécutée en tant que vue - avec des problèmes de performances possibles (bien sûr, c'est parfois un avantage). –

2

très similaire à l'affiche précédente, bu Je préfère la méthode que je montre ci-dessous, il est plus lisible, donc plus supportable, à mon avis

select val1 || val2 || val3 as val4, val1 from (
    select 'output1' as val1, '-output2' as val2, '-output3' as val3 from dual 
) 
Questions connexes