如何在表中找不到数据时如何获取具有默认值的行

时间:2016-11-08 12:03:19

标签: sql oracle date oracle11g

我有一个表格,其中包含一些带有日期字段的数据。

前:

|SCHEDULED_DATE |
---------------
|06-MAY-2016    |
|08-MAY-2016    |
|10-JUL-2016    |

现在我需要获得每个月的天数。

SELECT CASE WHEN (
SELECT COUNT(*) 
FROM SCHEDULE
WHERE SEQ = '429' 
AND TO_CHAR((SCHEDULED_DATE),'MON-YYYY')='MAY-2016')=0
THEN 0
ELSE (SELECT COUNT(*) 
FROM SCHEDULE
WHERE SEQ = '429' 
AND TO_CHAR((SCHEDULED_DATE),'MON-YYYY')='MAY-2016')
END 
AS NO_OF_DAYS, NVL(TO_CHAR((SCHEDULED_DATE),'MON'),'MAY') AS MONTH
FROM SCHEDULE
WHERE SEQ = '429';

NVL中,我将在执行

之前更新每个月的备用值

当我在MAY月份运行此查询时,我得到值2,输出就是这样。

|NO_OF_DAYS |MONTH|
------------ -----
|2          |MAY  |

但是对于JUN月,我需要将其显示为0,但输出是这样的

|NO_OF_DAYS |MONTH|
------------ -----
|           |     |

我想要的输出是这样的

|NO_OF_DAYS |MONTH|
------------ -----
|0          |JUN  |

无论如何要实现这个目标吗?

注意:我已经更新了我的问题,因为它不清楚。对不起我第一次没能问好。

2 个答案:

答案 0 :(得分:0)

如果我理解得很好,你可能需要这样的东西:

SQL> select count(1), parameter
  2      from (select '07-2016' parameter from dual)
  3           inner join schedule on parameter = to_char(SCHEDULED_DATE, 'mm-yyyy')
  4      where seq = '429';

  COUNT(1) PARAMET
---------- -------
         1 07-2016

答案 1 :(得分:0)

您的查询将给出您期望的结果。

如果您想在一个查询中获得结果,请执行以下操作:

select to_char(SCHEDULED_DATE, 'mon-yyyy'), seq, count(*) FROM SCHEDULE
    --optionally to get only some months
    where to_char(SCHEDULED_DATE, 'mon-yyyy') in (/*fill values from your array here*/) 
    and seq in (/*fill values from array of seqs*/)
    group by to_char(SCHEDULED_DATE, 'mon-yyyy'), seq;

如果你也想为不同的seq做到这一点,你可以这样做:

      // Drop Down Menus
      var subToggle = document.getElementsByClassName("submenu-toggle");
      var menu = subToggle.children;

      for (var i = 0; i < subToggle.length; i++) {
          subToggle.item(i).onclick = function () {

              menu[1].style.display = "block";
          }
      }

这将返回每个月的每个seq的计数,然后您可以在Java端处理。