首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL,Where函数,用于拉取具有是/否条件的字段

SQL,Where函数,用于拉取具有是/否条件的字段
EN

Stack Overflow用户
提问于 2015-10-03 03:49:32
回答 2查看 18关注 0票数 0

我有一个数据库,跟踪客户和他们分配的员工。一个客户端可以分配多个员工,但只能有一个案例管理器。并非所有客户都有指定为案例经理的工作人员。因此,该表如下所示:

代码语言:javascript
复制
Client    Case Manager?        Staff 
John 1          1              Don 1
John 1          0              Don 2 
John 1          0              Don 3
John 2          0              Don 1
John 2          0              Don 2
John 3          0              Don 1
John 3          0              Don 2
John 4          1              Don 5

因此,John 1被分配给三个员工,但只有Don 1是实际的案例经理。John 2被分配给两个员工,他们都不是案例经理。我希望能够运行一个报告,其中列出了所有客户及其案例经理。如果客户端没有案例管理器,我需要它返回一个NULL或类似的特性。

我可以很容易地将其设置为使用WHERE函数来显示具有案例管理器的客户端,但这会剔除那些没有的客户端。

有什么想法?

EN

回答 2

Stack Overflow用户

发布于 2015-10-03 03:53:19

您可以使用左连接:

代码语言:javascript
复制
SELECT DISTINCT t1.Client, t2.Staff AS CaseManagerName
FROM
  tablename t1 LEFT JOIN tablename t2
  ON t1.Client = t2.Client
     AND t2.casemanager = 1

请看fiddle here

或者,如果一个客户端可以有多个案例管理器,您可以使用GROUP_CONCAT:

代码语言:javascript
复制
SELECT t1.Client, GROUP_CONCAT(DISTINCT t2.Staff) AS CaseManagerName
FROM
  tablename t1 LEFT JOIN tablename t2
  ON t1.Client = t2.Client
     AND t2.casemanager = 1
GROUP BY
  t1.Client
票数 0
EN

Stack Overflow用户

发布于 2015-10-03 03:57:29

如果上述数据位于单个表中,则使用count()和group by:

代码语言:javascript
复制
select client, count(casemanager) from table group by client
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32914779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档