当列中的行为空时,ORACLE显示计数为零

Arn*_*rno 2 sql oracle select count zero

我有一个包含许多列的表,我在列上计算特定的名称,如果该名称不在列表中,我想将其显示为零,但不要进入列表。

SELECT Names, COUNT (*)
FROM NAMESTABLE
WHERE names IN
                ('Jenny',
                 'Penny',
                 'George',
                 'James',
                 'Jessica',
                 'Monica',
                 'Erica')
             AND  
adeddate BETWEEN '2014/10/15' AND '2014/10/16' 
GROUP BY names 
Run Code Online (Sandbox Code Playgroud)
NAMES  ||   COUNT(*)
Jenny  ||   33
Penny  ||   4
George ||   25
James  ||   87
Run Code Online (Sandbox Code Playgroud)

所以我想将杰西卡(Jessica),莫妮卡(Monica),埃里卡(Erica)设为零,即使这些名称不在COLUMN中

Names    ||  Count(*)
Jenny    ||    33
Penny    ||     4
George   ||    25 
James    ||    87
Jessica  ||     0
Monica   ||     0
Erica    ||     0
Run Code Online (Sandbox Code Playgroud)

nvl(count(*),0) 不起作用

Mur*_*nik 5

您可以按名称将结果分组,然后left join将结果分组到您的名称表中以填补空白:

SELECT    rn.name, NVL(cnt, 0)
FROM      (SELECT 'Jenny' AS name FROM dual
           UNION ALL
           SELECT 'Penny' FROM dual
           UNION ALL
           SELECT 'George' FROM dual
           UNION ALL
           SELECT 'James' FROM dual
           UNION ALL
           SELECT 'Jessica' FROM dual
           UNION ALL
           SELECT 'Monica' FROM dual
           UNION ALL
           SELECT 'Erica' FROM dual) rn
LEFT JOIN (SELECT   name, COUNT(*) AS cnt
           FROM     namestable
           WHERE    adeddate BETWEEN '2014/10/15' AND '2014/10/16' 
           GROUP BY name) n ON n.name = rn.name
Run Code Online (Sandbox Code Playgroud)