2017-02-13 1 views
0

Est-ce une bonne approche de trouver des Maximums à partir d'une requête SQL imbriquée et réutiliser cette valeur maximale dans la même requête.Est-ce une bonne approche pour trouver des maximums à partir d'une requête SQL imbriquée et réutiliser cette valeur maximale dans la même requête?

Par exemple:

Select Col1, Col2, Col3, Col2/Col3 AS Col4, CASE Alot of statements END Col5 
from Table A inner join Table B on A.Id = B.Id 
Inner Join Table C on B.Id = C.Id 
Inner Join Table D on C.Id = D.Id 

Maintenant, je dois trouver entier maximum de Col5 puis utiliser par la suite que Max Valeur pour diviser Col4 valeur.
J'ai également besoin d'afficher col1 et col2 avec les résultats.

Résultat attendu:
Col1, Col2, (Col4/MaxValue de Col5)

Quelqu'un pourrait me guider quelle est la meilleure solution dans ce cas?

Répondre

1

Si ce sont les seuls résultats dont vous avez besoin, aucune sous-requête/CTE est nécessaire:

Select Col1, Col2, 
     ((Col2/Col3)/
     max(case Alot of statements end) over() 
     ) as ratio 
from Table A inner join 
    Table B 
    on A.Id = B.Id Inner Join 
    Table C 
    on B.Id = C.Id Inner Join 
    Table D 
    on C.Id = D.Id; 

La réponse de Tim est certainement une bonne réponse si vous avez besoin de col5 plus d'une fois dans le jeu de résultats final.

1

Vous pouvez utiliser une expression de table commune:

WITH cte AS (
    SELECT Col1, Col2, Col3, Col2/Col3 AS Col4, 
      CASE Alot of statments END Col5 
    FROM TableA A 
    INNER JOIN TableB B 
     ON A.Id = B.Id 
    INNER JOIN TableC C 
     ON B.Id = C.Id 
    INNER JOIN TableD D 
     ON C.Id = D.Id 
) 
SELECT t.Col1, t.Col2, 
     t.Col4/MAX(t.Col5) OVER() 
FROM cte t