2015-06-21 45 views
2

我有一個where子句像排序,其中爲了

SELECT 
    name 
FROM 
    adresses 
WHERE 
    (name ='Peter' AND 
    surname = 'Miller') OR 
    emailadress1 = '[email protected]' OR 
    emailadress2 = '[email protected]' 

示例表

name surname  emailadress1 emailadress2  
------------------------------------------------ 
Michael    [email protected] 
Jim         [email protected] 
Peter Miller    

從而造成查詢:

Michael 
Jim 
Peter 

現在接縫的記錄進行排序爲就像上面示例表的排序順序一樣。

但我想讓他們在一個列表中,他們遵循where子句的順序本身。像

name & surname = sortorder 1 
emailadress1 = sortorder 2 
emailsadress2 = sortorder 3 

Peter 
Michael 
Jim 
+0

這是一個奇怪的要求。你可以把它分解爲三個查詢和一個'UNION ALL'。 –

回答

0

如果您正在尋找通過反向字母對它們進行排序,那麼你會按名稱DESC ORDER添加到您的查詢的末尾。

如果您正在尋找按特定人員對結果進行排序,那麼您將不得不添加某種標識符或排名,然後對其進行排序。

+0

我想按照where子句的順序將它們排序,如name和sure = 1; email1 = 2;電子郵件2 = 3 –

3

您的使用case聲明:

order by (case when (name ='Peter' AND surname = 'Miller') then 1 
       when emailadress1 = '[email protected]' then 2 
       when emailadress2 = '[email protected]' then 3 
       else 4 
      end) 
+0

偉大的工作。 –

+0

另外一個:我將如何選擇僅第一個排名值。可以說,只有一個記錄在2.評級where子句,然後我想只得到這個結果。 –

+0

嘗試'選擇第一個1。 。 。「或」行「(http://www.firebirdsql.org/refdocs/langrefupd20-select.html#langrefupd20-select-rows)。 –

1

添加

order by name, surname, emailadress1, emailadress2 

到查詢。

+0

這是最簡單的明顯解決方案。除了處理空值。 –