sql - 如果客户不在群组中则显示空白

标签 sql sql-server

表格

  • 客户 c(主键 = ID)
  • CustomerGroup cg(外键 = CustID)

内容

  • 客户 - ID、姓名
  • 客户组 ID、CustID、名称

要检索的字段

c.名称,cg.名称

问题

我想显示名为“Sales”的组中的所有客户,并在 cg.Name 中显示“Sales”值。但是,任何不属于“销售”组的客户都将显示客户名称,但将组名称保留为“空白”。

尝试过

SELECT c.Name, cg.Name, [NotInGroup].group
FROM Customer c
LEFT JOIN CustomerGroup cg on cg.CustID= c.ID
OUTER APPLY(
SELECT c2.Name, cg2.Name as [group]
FROM Customer c2
LEFT JOIN CustomerGroup cg2 on cg2.CustID= c2.ID
WHERE cg1.Name != 'Sales'
) as [NotInGroup]
WHERE cg.Name = 'Sales'

期望的结果

  • 客户 1“销售”
  • 客户 2“销售”
  • 客户 3“”
  • 客户 4“”
  • 客户 5“销售”

提前致谢。

最佳答案

一种方法使用左连接:

SELECT c.Name, cg.Name, 
FROM Customer c LEFT JOIN
     CustomerGroups cg
     ON cg.custid = c.id AND
        cg.Name = 'Sales';

请注意,对 Sales 的过滤位于 ON 子句中。这很重要,除非您希望为每个客户以及该客户所在的每个组提供单独的行。

另外,请注意连接条件。

关于sql - 如果客户不在群组中则显示空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54401154/

相关文章:

Mysql逐行聚合和

mysql - 使用 SQL 语句中的列作为填充后续列的子查询的变量

sql-server - 如何在我的开发机器上模拟网络延迟?

sql - 无法启动本地数据库

java - 如何使用 JDBC 执行过程

sql - XML SQL Server 查询以检索属性值和标记文本值

sql - 在 Oracle 中使用 sql 查找日期范围中的差距

c# - 查询嵌套数据的有效方法

java - EXECUTE 之后的事务计数表明 BEGIN 和 COMMIT 语句的数量不匹配。以前的计数

sql-server - 如何组合表并从上一个表创建新记录(如果丢失)?