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