2017-02-13 1 views
0

Это хороший подход к поиску максимумов из вложенного SQL-запроса, а затем снова использовать это максимальное значение в том же запросе.Хороший подход к поиску максимумов из вложенного SQL-запроса, а затем снова использовать это максимальное значение в одном запросе

Например:

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 

Теперь мне нужно найти максимальное число от Col5 а затем использовать это Максимальное значение разделить Col4 значение.
Мне также нужно показать col1 и col2 вместе с результатами.

Ожидаемый результат:
Col1, Col2 (COL4/MaxValue из Col5)

Может кто-нибудь руководство мне, что лучшим решением в этом случае?

ответ

1

Если только эти результаты вам нужно, то не подзапрос/CTE не требуется:

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; 

ответ Тима, безусловно, хороший ответ если вам нужно col5 более одного раза в окончательном наборе результатов.

1

Вы можете использовать общее табличное выражение:

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 
Смежные вопросы