行按名称分组并获取空值

Posted

技术标签:

【中文标题】行按名称分组并获取空值【英文标题】:rows group by name and get null values 【发布时间】:2015-02-23 07:39:13 【问题描述】:

我的视图中有以下结构

**Month|    Doctor| Executive|  Revenue**
1      |      A   |   1      |  100
1      |      B   |   1      |  200
NULL   |      C   |   1      |  0
NULL   |      D   |   2      |  0
2      |      A   |   1      |  400
1      |      E   |   1      |  100
NULL   |      F   |   2      |  0
2      |      A   |   1      |  300

我想要的结果是

**Executive|    Doctor| Revenue|    Month**
  1        |      A   | 100    |    1
  1        |      B   | 200    |    1
  1        |      C   | 0      |    1
  1        |      E   | 100    |    1

我希望Executive 1 的所有医生都出现在输出中,即使Month 列的值为NULL。

当我尝试查询时

select DocName,sum(rate),sum(patients) from DoctorRevenue
where SECode=1 and VisitMonth=10
group by DocName

它只给出 A、B、E,但我希望 C 出现在输出中。

【问题讨论】:

试试 isnull(VisitMonth,10)=10 您的表结构和查询不匹配。 【参考方案1】:

您只需在 [VisitMonth] 列的 WHERE 子句中包含 NULL,即

WHERE SECode = 1 AND (VisitMonth = 1 OR VisitMonth IS NULL)

括号是必需的。

这是fiddle

【讨论】:

【参考方案2】:

您需要在其中添加VisitMonth IS NULL 并使用ISNULL 函数将1 显示为NULL 值的月份。试试这个。

select Isnull(VisitMonth,1),DocName,sum(rate),sum(patients) from DoctorRevenue
where  SECode=1 
and    (VisitMonth = 1 OR VisitMonth IS NULL)
group by DocName,Isnull(VisitMonth,1)

【讨论】:

输出中缺少一些记录。如果某个医生 X 与 Executive 1 相关联,但 Month 列是 2,则输出也应显示记录 (X,NULL,0) .. 基本上输出应显示与 Executive 1 关联的所有医生及其月份。从您的上方查询医生 X 是否不是从第 10 个月开始,并且医生 X 不存在 NULL。它应该在输出中给出 (X,NULL,0)

以上是关于行按名称分组并获取空值的主要内容,如果未能解决你的问题,请参考以下文章

在 Sqlite 中,为不同列中返回的每个名称获取前 2 个

分组日期滚动中最新非空值的 Pandas 日期索引

如何将 EXTJS 4.2.1 网格行按多个关系分组?

如何获取表中具有空值的行,并且没有任何关于任何列名的行?

按名称分组的核心数据获取属性

SwiftUI:按名称分组数据并显示在展开列表中