如何连续返回空白字段?

时间:2019-03-29 11:39:21

标签: sql oracle

某些飞机部件必须执行定期维护,以保持其可靠性。但是,为了使维护计划人员可以看到,部件PN必须位于飞机部件数据库中。基于此,我创建了一个代码,该代码返回飞机的零部件清单不完整。

代码应如下所示:

1)第一列=主动飞机;

2)第二列=已从维护计划环境中安排维护的组件PN;

3)第三列=计算飞机中安装的组件的Nº;

4)第四列=返回是否安装了组件(案例1)或未安装组件(案例0)的情况

SELECT B.AC,
A.PN,
COUNT (DISTINCT (A.AC)) AS "Nº OF CONTROLS",
B.AC_TYPE ||'-'|| B.AC_SERIES AS "TYPE/SERIES",
(CASE WHEN COUNT (DISTINCT (A.AC)) = 1 THEN 1 ELSE 0 END) AS "CHECK"

FROM ODB.PLANNING A
LEFT JOIN ODB.AC_MASTER B
ON A.AC = B.AC

WHERE A.PN IN ('RCF6709')

AND B.AC_TYPE ||'-'|| B.AC_SERIES = 'ATR72-600'

AND B.STATUS = 'ACTIVE'

GROUP BY B.AC,
B.AC_TYPE ||'-'|| B.AC_SERIES,
A.PN

我从维护计划环境中提取了一份excel报告,我们有37架在役飞机,考虑到每架飞机都必须安装一个pn RCF6709组件,我的代码无法正常工作,因为它只返回了33架飞机。 话虽这么说,它只会显示安装了pn RCF6709组件的飞机,但它也应该显示没有安装pn RCF6709组件的飞机。

请参阅此链接上的图像以更好地理解。

https://drive.google.com/folderview?id=1-1VvWdcKXTW032IEGlX9xBO41FhmRYiV

2 个答案:

答案 0 :(得分:0)

请尝试

WHERE (A.PN IN ('RCF6709') or A.PN IS NULL )

答案 1 :(得分:0)

看来,您需要将外部联接换成另一种方式-因此,您首先会找到所需类型的所有飞机,然后查找可选的计划记录。但是,您还需要注意不要通过where子句将其意外地转换回内部联接。

我想这可能是您想要的:

SELECT B.AC,
  A.PN,
  COUNT (DISTINCT A.AC) AS "Nº OF CONTROLS",
  B.AC_TYPE ||'-'|| B.AC_SERIES AS "TYPE/SERIES",
  CASE WHEN COUNT (DISTINCT A.AC) = 1 THEN 1 ELSE 0 END AS "CHECK"
FROM ODB.AC_MASTER B
LEFT JOIN ODB.PLANNING A
ON A.AC = B.AC
AND A.PN = 'RCF6709'
WHERE B.AC_TYPE ||'-'|| B.AC_SERIES = 'ATR72-600'
AND B.STATUS = 'ACTIVE'
GROUP BY B.AC,
  B.AC_TYPE ||'-'|| B.AC_SERIES,
  A.PN

但是它显然未经测试,因为我们没有样本数据或预期结果。

我不确定您是否需要在计数中使用distinct,因为该值(或至少是b版本,由于存在匹配条件,因此由于连接条件而相同),以及如果没有,计数将为零。