Вложенная временная таблица в SQL FUNCTION, например select from (select ..) - PullRequest
0 голосов
/ 15 мая 2019

Есть ли возможность сделать что-то вроде select из select - вложенной временной таблицы результатов вместо исходной таблицы, используемой в функции, а не в процедуре?

Это прекрасно работает:

SELECT ID, PAR1, PAR2 INTO tempTABLE 
FROM originalTABLE
WHERE ..CONDITIONS..

SELECT TOP 1 (tbl1.PAR2 + tbl2.PAR2 + tbl3.PAR2) AS FinalResult
FROM tempTable tbl1
INNER JOIN tempTable tbl2 on tbl2.PAR1 > tbl1.PAR1
INNER JOIN tempTable tbl3 on tbl3.PAR1 > tbl2.PAR1
ORDER BY tbl1.PAR2 + tbl2.PAR2 + tbl3.PAR2

DROP TABLE tempTable

Но я не могу использовать его в функции из-за оператора INSERT, поэтому я пытаюсь так:

SELECT (tbl1.PAR2 + tbl2.PAR2 + tbl3.PAR2) AS FinalResult 
FROM ((SELECT ID, PAR1, PAR2 FROM originalTABLE
WHERE ..CONDITIONS.) AS tempTable) tbl1
    INNER JOIN tempTable tbl2 on tbl2.PAR1 > tbl1.PAR1
    INNER JOIN tempTable tbl3 on tbl3.PAR1 > tbl2.PAR1
    ORDER BY tbl1.PAR2 + tbl2.PAR2 + tbl3.PAR2

Ноэто не удалось.

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Вы можете напрямую заменить свою временную таблицу на CTE :

with tempTable as (
  SELECT ID, PAR1, PAR2 INTO tempTABLE 
  FROM originalTABLE
  WHERE ..CONDITIONS..
)
SELECT TOP 1 (tbl1.PAR2 + tbl2.PAR2 + tbl3.PAR2) AS FinalResult
FROM tempTable tbl1
INNER JOIN tempTable tbl2 on tbl2.PAR1 > tbl1.PAR1
INNER JOIN tempTable tbl3 on tbl3.PAR1 > tbl2.PAR1
ORDER BY tbl1.PAR2 + tbl2.PAR2 + tbl3.PAR2
0 голосов
/ 15 мая 2019

Это должно работать нормально:

SELECT (tbl1.PAR2 + tbl2.PAR2 + tbl3.PAR2) AS FinalResult 
FROM (SELECT ID, PAR1, PAR2 FROM originalTABLE
WHERE ..CONDITIONS.
     ) AS tempTable tbl1 JOIN
     tempTable tbl2
     ON tbl2.PAR1 > tbl1.PAR1 JOIN
     tempTable tbl3 
     ON tbl3.PAR1 > tbl2.PAR1
ORDER BY tbl1.PAR2 + tbl2.PAR2 + tbl3.PAR2;

Для подзапроса используется только один набор скобок.

Обратите внимание, что вы также можете использовать:

ORDER BY FinalResult

Псевдонимы столбцов распознаются в предложении ORDER BY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...