2014-07-21 167 views
1

比方說,我有這樣的一些信息如下:SQL條件邏輯

First_Name Last_Name Title   Branch Location 
John  Johnson Manager   NY 
Jack  Smith  Internet Manager NY 
Chris  Jones  Internet Manager NY 
Harold  O'Reilly Executive  NY 
Liz  Young  Manager   WA 
Trey  Ritter Manager   WA 
Rick  Morgan Executive  NC 
Allison Hubbard Internet Manager NC 
Holly  Dietz  Executive  FL 

我想申請以下邏輯:

  • 如果出現在某個位置的網絡管理員,其他記錄(執行管理器)可以被刪除。如果有一個以上的互聯網經理,保留這些記錄。

  • 如果沒有互聯網經理

    • 如果有至少一個管理者存在的位置,保留這些記錄和刪除EXEC記錄。
    • 如果沒有經理記錄,請保留執行記錄。

因此,在本質上,其結果應該是這樣的:

First_Name Last_Name Title   Branch Location 
Jack  Smith  Internet Manager NY 
Chris  Jones  Internet Manager NY 
Liz  Young  Manager   WA 
Trey  Ritter Manager   WA 
Allison Hubbard Internet Manager NC 
Holly  Dietz  Executive  FL 

我知道我可能要使用EXISTS條件或諸如此類的話,但我不能確定哪裏開始。我怎樣才能達到要求的輸出?

+0

如果有兩個(或更多)互聯網經理,你想要高管和互聯網經理,但不是經理?那是對的嗎? – Jenn

+0

@Jenn否 - 如果至少有一個互聯網經理,我想要這些記錄(給定的#個互聯網經理)。高管和經理可以被刪除。希望澄清一點。 – Ryan

+0

你可以從結果集中刪除Harold O'Reilly嗎? – Jenn

回答

2

我想看看這個問題,下面的步驟:

  1. 查找每個分支
  2. 最高優先級的標題查找匹配可用的最高優先級,每個分支
所有名稱

因此,從步驟1開始:

select Branch_Location, 
    [titleFlag] = min(case 
         when Title='Internet Manager' then 1 
         when Title='Manager' then 2 
         when Title='Executive' then 3 
         else 999 
        end) 
from table 
group by Branch_location 

然後,使用步驟1作爲su在bquery連接(我將使用一個CTE語句分開吧):

;with bestTitle as (
    select Branch_Location, 
    [titleFlag] = min(case 
         when Title='Internet Manager' then 1 
         when Title='Manager' then 2 
         when Title='Executive' then 3 
         else 999 
         end) 
    from table 
    group by Branch_location 
) 
select n.* 
from table n 
    join bestTitle t on n.Branch_Location=t.Branch_Location 
        and n.Title = case t.titleFlag 
            when 1 then 'Internet Manager' 
            when 2 then 'Manager' 
            when 3 then 'Executive' 
            else 'This is an unknown condition...' 
           end 

正如你所看到的,我真的不使用if聲明,而是一個case語句能夠正確排序/優先標題。從那裏開始,第1步子查詢決定了爲每個分支找到的內容,第2步外部查詢找到滿足這些條件的記錄。

+0

謝謝!這一思路正是我所期待的。我也很欣賞這些解釋 - 非常有幫助。 – Ryan

+0

@Ryan,我很高興這很有幫助。還應該注意的是,解決這個問題的方法有很多,根據表格和其他細節的確切結構,有些方法比其他方法更好。 – chezy525