当count使用1个表返回null时显示所有行[重复]

Posted

技术标签:

【中文标题】当count使用1个表返回null时显示所有行[重复]【英文标题】:show all rows when count return null using 1 table [duplicate] 【发布时间】:2015-08-11 16:32:22 【问题描述】:

所以我有一个表格筛选:

Name                                      Null?      Type
--------------------------------------- --------  -------------

 SCREENINGNO                             NOT NULL   VARCHAR2(8)

 CINEMANO                                           VARCHAR2(8)

 MOVIENO                                            VARCHAR2(8)

 SUPERVISORNO                                       VARCHAR2(8)

 CAMERAOPNO                                         VARCHAR2(8)

 HOURSTART                                          NUMBER(38)

 SCREENINGDATE                                      DATE

问题是“显示 2015 年每个月安排的放映次数。”

我试过了:

SELECT to_char(s1.screeningdate, 'mm') AS month
    ,count(s2.screeningno) AS number_of_times_screened
FROM screening s1
    ,screening s2
WHERE s1.movieno(+) = s2.movieno
    AND to_char(s1.screeningdate, 'yy') = '15'
GROUP BY to_char(s1.screeningdate, 'mm')
ORDER BY to_char(s1.screeningdate, 'mm');

它返回了:

MO            NUMBER_OF_TIMES_SCREENED
--            ------------------------ 
01                       22

02                       31

03                       24

04                       32

05                       26

06                       37

07                       15

08                       15

10                       10

11                        5

12                        8

已选择 11 行。

它只返回 11 行,我也需要它来显示 9 月。有人可以帮忙吗?

【问题讨论】:

如果您需要任何帮助,您可能需要提供示例数据。另外,请检查您的表格中是否有 9 月份的任何数据。 使用分区外连接,如***.com/questions/11254121/…。它专为这种情况而设计。 【参考方案1】:

这样做的一种方法是使用 dual psedotable 和 connect by level 子句来生成 1 到 12 之间的所有数字,并将其加入到放映计数中:

SELECT    d.month, cnt
FROM      (SELECT     LPAD(LEVEL, 2, '0') AS month
           FROM       dual
           CONNECT BY LEVEL <= 12) d
LEFT JOIN (SELECT   TO_CHAR(screeningdate, 'mm') AS month, COUNT(*) AS cnt
           FROM     screeninginfo
           WHERE    TO_CHAR(screeningdate, 'yy') = '15'
           GROUP BY TO_CHAR(screeningdate, 'mm')) s ON d.month = s.month
ORDER BY  1 ASC

【讨论】:

看起来不错。可能需要对个位数月份的加入条件进行一些调整。例如,对于 1 月份,连接条件将尝试将 '1' 连接到 '01' @sstan 很好,谢谢 - 我已经编辑了我的答案以使用 lpad 而不是天真的 to_char 来解决这个问题。

以上是关于当count使用1个表返回null时显示所有行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Laravel API - 当状态字段为空时显示所有地区

如何保存选定的 TableView 行数据并在用户返回屏幕时显示?

Oracle - 查询没有返回结果时显示“无行”

Angularjs - 检查单选按钮时显示/隐藏表格行

当 BIRT 报告中的表为空时显示“无数据”消息

js控制当字数超出规定行数时显示点点点