2014-03-19 52 views
2
更高

我的表,這是一個:在SQL搜索同一個表兩次總是返回值,它是在排名

name  email  password 
amit  [email protected] yadav 
yadav  [email protected] yadav 

,我的程序是這樣的一個

ALTER proc [dbo].[prcAdvanceSearchUser] 
@username varchar(50) 
as 
begin 
    select * 
    from userdetails 
    where (vname like @username + '%' 
      or vemail like @username + '%' 
      or vpassword like @username +'%') 
end 

每當我在尋找一個成員名爲yadav ...它顯示阿米特在頂部,因爲阿米特有密碼= yadav ....

現在我的觀點是...我的結果應該首先顯示,然後通過電子郵件ND然後通過密碼或城市(whtever列名)..

是否有這種搜索的任何可能的方式?????

回答

1

通過根據tag列進行排序,所有這些行以後對vname成功匹配來在頂部作爲標記值= 1返回,則在排序順序來標記值= 2,所有這些對

針對 vemail匹配成功的,因此行
ALTER proc [dbo].[prcAdvanceSearchUser] @username varchar(50) 
as 
begin 

select *,1 as tag from userdetails 
where vname like @username + '%' 

Union 

select *,2 as tag from userdetails 
where vemail like @username + '%' 

Union 

select *,3 as tag from userdetails 
where vpassword like @username +'%' 

order by tag 

end 
+0

SRY兄弟這是行不通的....這將始終顯示在頂部艾米特......我覺得你didnt有我的一點.. 我的觀點是,如果阿米特有th E在他的vpassword領域和其他人同場具有相同的名稱...第二個必須顯示在頂部... –

+0

yes..plz稍候...編輯 –

+0

PLZ現在檢查... –

1

試試這個

SELECT CASE WHEN vname like @username + '%' THEN 1 
      WHEN vemail like @username + '%' THEN 2 
      WHEN vpassword like @username +'%' THEN 3 
     END as OrdNum 
     userdetails.*, 

from userdetails 
where (vname like @username + '%' 
     or vemail like @username + '%' 
     or vpassword like @username +'%') 
ORDER BY OrdNum 
相關問題