按特定顺序选择值

Neu*_*ino 1 sql sql-server

我们使用下表作为示例:

tableId
1
2
3
4
Run Code Online (Sandbox Code Playgroud)

我想选择tableId等于1或2的第一个值,如果没有选择任何行,则选择3或4.

我可以使用下面的select语句,但它只涵盖第一个条件:

SELECT tableId
FROM exampleTable
WHERE tableId = 1 OR tableId = 2
Run Code Online (Sandbox Code Playgroud)

我应该在查询中添加什么才能使其正常工作?

Gor*_*off 5

这是一种方法:

SELECT tableId
FROM exampleTable
WHERE tableId IN (1, 2)
UNION ALL
SELECT tableId
FROM exampleTable
WHERE tableId IN (3, 4) AND
      NOT EXISTS (SELECT 1 FROM exampleTable WHERE tableId IN (1, 2));
Run Code Online (Sandbox Code Playgroud)

这是一种替代方法,使用TOP WITH TIES:

select top 1 with ties
from exampleTable
where tableId in (1, 2, 3, 4)
order by (case when tableId in (1, 2) then 1 else 2 end);
Run Code Online (Sandbox Code Playgroud)

top with tiesorder by键是相同的时返回行.通过使用casein order by,您可以保证1和2以及3和4的排序键相同.