某些飞机部件必须执行定期维护,以保持其可靠性。但是,为了使维护计划人员可以看到,部件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
答案 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
版本,由于存在匹配条件,因此由于连接条件而相同),以及如果没有,计数将为零。