Использовать значения из одной строки SELECT TOP 1 в другом запросе - PullRequest
0 голосов
/ 20 мая 2019

Я сложил два запроса, так как мне нужна одна таблица результатов. У меня сложный первый запрос с таблицей cte и некоторыми функциями, который дает мне результат в одну строку, например:

SELECT TOP 1 Result1, Result2, Result3 
FROM  someTable
INNER JOIN antoherTable ...
WHERE ...
ORDER BY...

Таблица результатов:

Result1,Result2,Result3
1,2,3

В той же процедуре у меня есть второе предложение SELECT, подобное этому:

SELECT Col1, Col2, Col3, Result 
FROM tbl1
INNER JOIN tbl2 ..
WHERE ...
ORDER BY..

Result table:
Col1, Col2, Col3, Result
aa,bb,cc,5
aa,bb,cc,0
aa,bb,cc,2
aa,bb,cc,1

Каким-то образом мне нужно пометить строки, которые приводят к результатам первого запроса (в этом примере последние две строки).

Я использую SQL Server 2005. Я попытался добавить дополнительный столбец с именем «Помечено» со значениями 0/1 и поместить весь первый запрос в функцию CASE WHEN.

Это выглядит так:

SELECT Col1, Col2, Col3, Result,
CASE WHEN Result IN (SELECT TOP 1 Result1, Result2, Result3 ....)
FROM tbl1
INNER JOIN tbl2 ..
WHERE ...
ORDER BY..

Но это дает мне ошибку: В списке выбора можно указать только одно выражение, если подзапрос не введен с EXISTS

Это работает, только если я использую один столбец, только Result1, как это:

CASE WHEN Result IN (SELECT TOP 1 Result1 ....)

Я нашел какой-то поток с этим сообщением об ошибке, и я попробовал также функцию EXISTS, но безуспешно.

Заранее спасибо, и извините за любительский вопрос.

1 Ответ

2 голосов
/ 20 мая 2019

Вы можете использовать exists вместо:

(CASE WHEN EXISTS (SELECT 1
                   FROM . . .  -- your query here
                   WHERE x.Result IN (y.Result1, y.Result2, y.Result3)
                  )
      . . .

Обратите внимание, что x - это псевдоним из запроса external , а y - это псевдоним из внутреннего.

Вы также можете использовать IN и отключить:

(CASE WHEN x.result IN (SELECT v.Result
                        FROM . . .  CROSS APPLY
                             (VALUES (Result1), (Result2), (Result3)) v(result
                       )
      . . .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...