如何在行上返回空白字段?

问题描述 投票:0回答:2

一些飞机部件必须执行定期维护以保持其可靠性。但是为了使维护计划人员可以看到,组件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

sql oracle
2个回答
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版本,如果有匹配则由于连接条件而相同,如果没有则计数将为零)包含在分组中。


0
投票

请试试

WHERE (A.PN IN ('RCF6709') or A.PN IS NULL )
© www.soinside.com 2019 - 2024. All rights reserved.