2016-06-29 7 views
2

として行数1を得るまでの条件は/どこ条件を無視ここで、iは、1つのレコードの結果を得れば追加スキップまたは私は私が実行を停止する必要があるいくつかのCTEまたはクエリを探していた結果

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' 

OUTPUT: 1ヴェンカトハイデラバード9849898401 500018

例2:ジップコードと 結果500020.

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

OUTPUT: 出力が1つのレコードでなければなりませんが、我々は、郵便番号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 

ではレコードを持っていないとして、私たちは郵便番号を無視する必要があり、私たちはCTEでそれを行うことができると思うが、それを達成することができません。

目的は、単一のレコードを取得するまで、where句の各条件を適用することです。条件1 [name = 'Venkat']のレコードが増えたら、2番目の[city = 'hyderabad']などを適用する必要があります.....

前もって感謝します。

答えて

0

CTEを使用する必要はありません。以下のクエリは、1レコードのみ使用できます。

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

これはあなただけone record with name of 'Venkat'

3

このような何かが動作するはずを与える:

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([email protected], 1, 0) + IIF([email protected], 1, 0) + 
      IIF([email protected], 1, 0) + IIF([email protected], 1, 0) AS matches) AS t 
WHERE t.matches <> 0 
ORDER BY t.matches DESC 

クエリはマッチの最大数を持つ単一のレコードを返します。

+0

'where t.matches <> 0'を追加する必要があると思うので、何もマッチしなければ何も返しません。 – artm

+0

@artmいいキャッチ!私は私の答えを編集しました、ありがとう。 –

+0

awesome多くのありがとうGiorgosとartm、結果は私が探しているものと同じですが、CROSS APPLYがここでどのように動作するかはわかりません。 –

関連する問題