0

テーブル EMP_DETAILS にデータがあります

EMPLOYEE_NUMBER      ROLE
NSA5421              CONTRACTOR
NSA390               CONTRACTOR
E8923                EMPLOYEE
E2390                EMPLOYEE

レコードがなくてもゼロ表示にしたいので、以下を試してみましたが思い通りの結果にはなりませんでした

SELECT  CASE WHEN cnt IS NULL THEN 0 ELSE cnt END cnt,
        CASE WHEN role IS NULL THEN '0' ELSE role END role
FROM
(SELECT   COUNT (*) cnt, role
     FROM   emp_details
    WHERE   employee_number = 'E3400'
GROUP BY   role)
4

4 に答える 4

1
SELECT  CASE WHEN cnt IS NULL THEN 0 ELSE cnt END cnt,
        CASE WHEN role IS NULL THEN '0' ELSE role END role
FROM
(SELECT   COUNT (*) cnt, role
     FROM   emp_details
    WHERE   employee_number = 'E3400'
GROUP BY   ROLE
UNION
SELECT NULL, NULL  FROM dual
WHERE NOT EXISTS
     ( SELECT   COUNT (*) cnt, role
     FROM   emp_details
    WHERE   employee_number = 'E3400'
GROUP BY   ROLE
     )
);
于 2013-10-08T06:35:02.737 に答える
1

内部クエリは、null 値ではなく何も返しません。

SELECT   COUNT (*) cnt, role
     FROM   emp_details
    WHERE   employee_number = 'E3400'
GROUP BY   role

EXISTS 句を使用する

于 2013-10-08T06:34:21.933 に答える