2017-09-27 8 views
3

Iは、以下のテーブルからの行のセットを返す非常に単純なクエリを有する:WHERE条件が満たされていない場合、セットの少なくとも1行を選択するにはどうすればよいですか?

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

は私は((1)TOP)テーブルN1 = @Xから1行を必要とします。次のクエリは、すべての行を返しませんたとえば、すべてのN1

のために存在するだろう、私はむしろ、特定のN2値になるだろう、すべてのケースでは、しかし、必ずしもすべてのケースでN2値:

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 

すべてのヘルプは

答えて

8

を理解されるであろう、私はあなたがorder byをしたいと思う:

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

OMG !! = Dあなたは天才です! @gordonlinoff – Ayorus

関連する問題