Comment utiliser une colonne calculée pour calculer une autre colonne dans la même vue
J'espère que vous pouvez aider avec cette question. Je suis à l'aide de Oracle SQL (SQL Developer pour ce point de vue)...
Si j'ai une table avec les colonnes suivantes:
- ColumnA (Nombre)
- Colonneb (Nombre)
- ColumnC (Nombre)
De mon point de vue j'ai
Select
ColumnA,
ColumnB,
ColumnA + ColumnB As calccolumn1
Maintenant à ce point, je veux utiliser calccolumn1
mais je ne peux pas dire...
Select
ColumnA,
ColumnB,
ColumnA + ColumnB As calccolumn1
calccolumn1 / ColumnC as calccolumn2
Je suppose que j'ai besoin d'un certain type de sous-requête..mais c'est là que j'ai besoin de votre aide...
Comment pourrais-je le mot de la requête afin que je puisse utiliser calccolumn1 dans un autre calcul au sein de la même requête? Il pourrait être un Si ou alors si, mais au fond il est un certain nombre dérivé.
- Est-il une raison de ne pas juste faire
(ColumnA + ColumnB) / ColumnC As calccolumn2
? - Je suis d'accord...dans cet exemple simplifié..qui fonctionne très bien. J'ai essayé d'obtenir à la notion de la façon dont je voudrais formater un exemple simplié de s'appliquer à un plus complexe...donc si ColumnA était un Cas complexe Lors de l'instruction et Colonneb était aussi...alors si je veux combinés pour produire calccolumn1 et de les utiliser plus tard pour calccolumn2. J'ai simplement il suffit de mettre la totalité de l'état de la Colonne A dans () et de même pour B et de les ajouter?
- Ayant expression complexe sur le même niveau pourrait être à portée de main. Définition unique est plus facile à maintenir que la copie sur plusieurs endroits. Il est faisable à l'aide de
CROSS APPLY approach
- Bien sûr, la question n'a tout simplement pas de montrer une expression complexe vraiment. J'allais dire la croix appliquer n'est pas disponible lorsque la question a été posée, mais 12c avait été quelques mois, je n'étais tout simplement pas au courant de ça... La sous-requête approche ne se répètent pas qu'il soit si.
- Il n'y a rien de mal avec vue intégrée/CTE approche. Je voulais juste montrer qu'il est possible d'avoir une expression complexe à la même requête de niveau comme alternative.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser une requête imbriquée:
Avec une ligne avec les valeurs de
3
,4
,5
qui donne:Vous pouvez également répéter le premier calcul, sauf si il est vraiment en train de faire quelque chose de cher (par l'intermédiaire d'un appel de fonction, par exemple):
Dans Sql Server
Vous pouvez faire cela en utilisant
cross apply
Si vous voulez faire référence à une colonne calculée sur la "même requête de niveau" ensuite, vous pouvez utiliser
CROSS APPLY
(Oracle 12c):Requête:
DBFiddle Démo
Veuillez noter que l'expression de
CROSS APPLY/OUTER APPLY
est disponible dans d'autres clauses trop:Cette approche permet d'éviter d'emballage intégralité de la requête avec outerquery ou de le copier/coller même expression dans plusieurs endroits(avec complexe, il pourrait être difficile à maintenir).
Article connexe: Le Langage SQL est la Plupart des fonctionnalités Manquantes
Vous devez inclure l'expression de votre colonne calculée: