Можно ли сделать что-то похожее на следующее в SQL Server 2012?
IF EXISTS (
WITH DATA AS (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY column ORDER BY Column) AS rn
FROM table )
SELECT *
FROM DATA
WHERE rn = 2 )
BEGIN
...
END
Я попытался использовать этот синтаксис и получил ошибку. Если это невозможно, будет ли использование временной таблицы лучшим способом для этого?
sql-server
cte
Уэстон Санки
источник
источник
IF EXISTS (SELECT * FROM table)
?WHERE rn = 2
IF EXISTS (SELECT column FROM dbo.table GROUP BY column HAVING COUNT(*)>1)
Ответы:
CTE нельзя использовать в качестве подзапроса. Один обходной путь будет:
Другой будет:
EXISTS
Я думаю, что даже если предложенный вами синтаксис действителен, в этом случае не будет короткого замыкания (и я подозреваю, что именно поэтому вы и захотите его использовать), поскольку оконная функция должна материализоваться во всем наборе, прежде чемrn
сможет быть отфильтрованным.источник
Другой вариант - использовать переменную:
источник
Я думаю, что вы можете использовать такой код:
Результат условия может быть сохранен как переменная.
источник