如何在不满足WHERE条件时选择至少一行的一行?

时间:2017-09-27 18:43:09

标签: sql sql-server sql-server-2008

我有一个非常简单的查询,它返回一组行,如下表所示:

Table1
N1  N2
1   A1
1   A2
2   B1
2   B2
2   B3

N1 = @X时我只需要表中的一行(TOP(1))。在所有情况下,我宁愿获得特定的N2值,但并非在所有情况下,每N2

都会存在N1

例如,以下查询不会返回任何行:

SELECT TOP(1) N1, N2 FROM Table WHERE N1 = 2 AND N2 = 'B4'

我正在寻找一种简单的方法,即使条件N2 = @N2未满足,也至少返回1行。返回哪一行并不重要,如果@N2值不存在,则任何行都可以。

到目前为止,我已经完成了以下操作,但如果有人知道更简单的事情,我希望如此:

;with tmp AS (
SELECT TOP(1) *, 1 AS No FROM Table1 WHERE N1 = @N1 AND N2 = @N2
UNION
SELECT TOP(1) *, 2 AS No FROM Table1 WHERE N1 = @N1
)

SELECT TOP(1) * FROM tmp ORDER BY No

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:8)

我想你想要order by

SELECT TOP(1) N1, N2
FROM Table
WHERE N1 = 2 
ORDER BY (CASE WHEN N2 = 'B4' THEN 1 ELSE 2 END);