即使缺少一条记录,如何在SQL中获取整体状态?

时间:2016-12-14 10:37:55

标签: sql oracle

SELECT 'EMPLOYEE TABLE' TABLE ,
   CASE WHEN ROLL_NO IN 'MISSING' THEN 'FAIL' ELSE 'PASS' END AS STATUS 
FROM EMPLOYEE_TABLE;

EMPLOYEE_TABLE表:

employee    roll_no
---------------------
  A           E
  B           F
  C           MISSING
  D           MISSING

输出:

TABLE               STATUS
----------------------------
EMPLOYEE TABLE      FAIL
EMPLOYEE TABLE      FAIL
EMPLOYEE TABLE      PASS
EMPLOYEE TABLE      PASS

预期输出(只有一行,通过'通过'或'失败')

TABLE               STATUS
----------------------------
EMPLOYEE TABLE      FAIL

如果缺少任何一条记录,那么我希望整体状态为“FAIL'否则我应该通过' PASS'。

2 个答案:

答案 0 :(得分:4)

SELECT 
    'EMPLOYEE TABLE' TABLE, 
    MIN(CASE WHEN ROLL_NO IN 'MISSING' THEN 'FAIL' ELSE 'PASS' END) AS STATUS 
FROM EMPLOYEE_TABLE
GROUP BY 'EMPLOYEE TABLE';

MIN将按字母顺序排序状态列的结果。由于您只返回失败或通过,因此只要给定员工表的记录失败,它就会显示失败。如果没有失败则会显示通过。

我按员工表分组,但我不清楚它代表什么 - 可能需要更改。

答案 1 :(得分:2)

你走了:

SELECT 'EMPLOYEE TABLE' TABLE, 
CASE WHEN EXISTS(SELECT * from EMPLOYEE_TABLE WHERE roll_no IN ('MISSING'))
THEN 'FAIL' ELSE 'PASS' END AS STATUS
FROM DUAL;