2017-05-31 53 views
0

的任何行搜索的价值存在SQL CASE语句我有如下表:解决:在WHERE子句中

Event  StaffName    JobRole 
Event 1 FirstName LastName1  Subordinate Type 1 
Event 1 FirstName LastName2  Subordinate Type 2 
Event 2 FirstName LastName3  Supervisor 
Event 2 FirstName LastName4  Subordinate Type 1 
Event 2 FirstName LastName5  Subordinate Type 2 

我查询饲料每返回行生成一个报告,一个更大的报告,但只有满足某些标准。我想创建一个WHERE子句执行以下操作:

  • 如果一个监督员工作的事件,产生只占 上司一个报告。下属不需要报告。
  • 如果没有分配给事件的主管,则仅为每个从属类型1生成一个报告。 (理想情况下是一个单一的报告无论多少下属们的工作是大事,但我生活中可以没有这个。)
  • 从式2永远不会需要一个报告

我尝试了下列基于一些建议,我看到其他地方(事件标准被指定为运行报告的一部分,因此不包含在查询):

WHERE 
JobRole LIKE 
(CASE WHEN EXISTS (SELECT JobRole 
        FROM Table 
        WHERE JobRole LIKE 'Supervisor') 
     THEN 'Supervisor' 
    ELSE 'Subordinate Type 1' 
END) 

当监督员被分配到一个事件能正常工作(即事件2 ),但是当监督人员不存在给定事件(即事件1)时返回零值。我不确定ELSE位为什么不在踢,但我承认我不太熟悉EXISTS的细微差别。

我正在SQL Server Management Studio 2012中工作,如果有帮助的话。谢谢!编辑:Solution found,谢谢大家谁帮助!

+0

如果你没有任何通配符比较,你为什么使用'like'。我会用'='来代替。 – AXMIM

+0

我的实际JobRoles将会有一个通配符,为了清楚起见,我在这里简化了它们。 – MustGoFaster

+0

虽然它会表现不佳,并且不会处理只有一个下属类型1的报告,但您的代码应该可以工作。我怀疑你的数据实际上并不像你认为的那样,或者你有一个错字。我会再仔细检查一下这个值,看看它们是否与你在条件中写的一样。 – AXMIM

回答

0

试试这个:

WHERE (JobRole = 'Supervisor') -- is supervisor 
OR (JobRole = 'Subordinate Type 1' -- or is Subordinate Type 1 and... 
    and Event not in (select distinct event -- not is event with superv. 
         from Table 
         where JobRole = 'Supervisor') 
    ) 

希望这有助于!

-1

这是更好地完成为OR:

WHERE (JobRole = 'Supervisor' or JobRole = 'Subordinate Type 1') 

注意,如果没有在你对测试文本通配符,LIKE相当于=等,以更清楚发生了什么事,最好(恕我直言)至使用=。

+0

这将生成事件#2的下属的报告 – AXMIM

+0

我非常肯定,在功能上这相当于您显示的WHERE子句。根据你对上述评论的回复来判断,我认为你没有完全解释这个问题;例如你的评论说通配符是必需的。鉴于你在这个问题上的解释,我不明白他们会如何。 –

+0

我没有说通配符是必需的,我说如果没有通配符,并且没有等效,我使用'=' – AXMIM