SQL为未找到的记录返回零

时间:2017-02-13 14:44:37

标签: sql

我有一个图表,我想显示资源名称和他们为每种状态类型处理的请求数。例如约翰史密斯有5个 - 正在进行中,4个 - 未开始,5个 - 分析,0 - 暂停。

我的查询为John Smith提取所有记录,但仅显示存在的记录。如何强制结果表显示处于保持状态的John Smith的零值?

我想要显示的结果是10名员工,每位员工都显示我可用的所有状态(未启动,正在进行,暂停,分析,延期等),如果没有项目处于特定阶段,则为零那资源。

下面的图片显示了最左边的资源,但如果某些人没有特定的状态,则表示不会显示。我希望所有状态都显示,即使它是零。

Image

2 个答案:

答案 0 :(得分:0)

使用左外连接并对结果进行分组。如果没有针对'John Smith'的记录,你将获得Null。

尝试将null转换为零的情况。

答案 1 :(得分:0)

作为一个概念,生成所有员工和可用状态的列表,然后将数据加入到此。这将为每个人提供一行,即使该员工不存在。

SQL server / oracle

with staff as
(
select staffname, status
from (select distinct staffname from table1)
cross join (select distinct status from table1)
)
select staff.*, table1.OtherColumns
from staff
left join table1
  on staff.staffname = table2.staffname
  and staff.status = table2.status

MySQL的:

select staff.*, table1.OtherColumns
from 
  (
  select staffname, status
  from (select distinct staffname from table1)
  cross join (select distinct status from table1)
  ) staff
left join table1
  on staff.staffname = table2.staffname
  and staff.status = table2.status