2014-07-21 165 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