2017-09-27 1 views
3

J'ai une requête très simple qui renvoie un ensemble de lignes, dans le tableau suivant:Comment sélectionner au moins 1 ligne d'un ensemble lorsque les conditions WHERE ne sont pas remplies?

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

Je ne ai besoin d'une ligne (TOP (1)) de la table lorsque N1 = @X. Dans tous les cas, je préférerais obtenir une valeur N2 spécifique, mais dans pas tous les cas, une valeur N2 serait existe pour chaque N1

Par exemple, la requête suivante ne reviendra ligne:

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

I Je cherche un moyen simple de retourner au moins 1 ligne même si la condition N2 = @N2 n'est pas remplie. Peu importe quelle ligne est retournée, tout sera OK si la valeur @N2 n'existe pas.

Jusqu'à présent, je l'ai fait ce qui suit, mais je voudrais si quelqu'un sait quelque chose de plus simple:

;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 

Toute aide sera appréciée

Répondre

8

Je pense que vous voulez 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 Tu es un génie !!! @gordonlinoff – Ayorus