我有一个非常简单的查询,它返回一组行,如下表所示:
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
任何帮助将不胜感激
答案 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);