Sauter ou append où condition jusqu'à ce que je reçois un nombre de lignes 1 comme résultat

Je suis à la search d'un CTE ou d'une requête où je dois arrêter d'exécuter / ignorer la condition où je reçois un résultat de 1 logging

CREATE TABLE EmployeeTest ( ID INT PRIMARY KEY IDENTITY(1,1) ,Name VARCHAR(100) ,City VARCHAR(100) ,Phone VARCHAR(100) ,ZipCode VARCHAR(20) ) INSERT INTO EmployeeTest VALUES ('Venkat','Hyderabad','9849898401','500018') INSERT INTO EmployeeTest VALUES ('Venkat','Hyderabad','9849898401','500019') INSERT INTO EmployeeTest VALUES ('Venkat','Hyderabad','9849898402','500019') INSERT INTO EmployeeTest VALUES ('Venkat','Secunderabad','9849898402','500019') INSERT INTO EmployeeTest VALUES ('Name1','Secunderabad','9849898402','500019') Ex: 1 --output is 1 select * from employeetest where name = 'Venkat' and city = 'hyderabad' and phone='9849898401' and zipcode='500018' 

SORTIE: 1 Venkat Hyderabad 9849898401 500018

Ex 2: résultats avec le code postal 500020.

 select * from employeetest where name = 'Venkat' and city = 'hyderabad' and phone='9849898401' and zipcode='500020' 

OUTPUT: la sortie doit être 1 logging mais nous devons ignorer le code postal car nous n'avons aucun logging avec le code postal 500020.

 We have two records but i need first as output 1 Venkat Hyderabad 9849898401 500018 2 Venkat Hyderabad 9849898401 500019 Final Output would be, 1 Venkat Hyderabad 9849898401 500018 

Je pense que nous pouvons le faire avec CTE mais incapable de le réaliser.

L'objective est que nous devons appliquer chaque condition dans la clause where jusqu'à ce que nous obtenions un seul logging. Si nous obtenons plus d'loggings pour la condition un [nom = 'Venkat'] nous devons appliquer la deuxième [ville = 'hyderabad'] et ainsi de suite …..

Des idées! Merci d'avance.

Quelque chose comme ça devrait fonctionner:

 DECLARE @city VARCHAR(100) = 'hyderabad' DECLARE @name VARCHAR(100) = 'Venkat' DECLARE @phone VARCHAR(100) = '9849898401' DECLARE @zipcode VARCHAR(100) = '500020' SELECT TOP 1 ID, Name, City, Phone, ZipCode, t.matches FROM EmployeeTest CROSS APPLY ( SELECT IIF(Name=@name, 1, 0) + IIF(City=@city, 1, 0) + IIF(Phone=@phone, 1, 0) + IIF(ZipCode=@zipcode, 1, 0) AS matches) AS t WHERE t.matches <> 0 ORDER BY t.matches DESC 

La requête renvoie un seul logging ayant le plus grand nombre de correspondances.

vous n'avez pas besoin d'utiliser CTE . Vous pouvez utiliser la requête ci-dessous pour seulement 1 logging.

 select top 1 * from employeetest where name = 'Venkat' 

Cela vous donne one record with name of 'Venkat' seul one record with name of 'Venkat'