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

Sql 在表中找不到数据时如何获取具有默认值的行,sql,oracle,date,oracle11g,Sql,Oracle,Date,Oracle11g,我有一个表,其中包含一些带有日期字段的数据 例: 现在我需要得到每个月的天数 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_D

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

例:

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

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  |
我想要的输出是这样的

|NO_OF_DAYS |MONTH|
------------ -----
|           |     |
|NO_OF_DAYS |MONTH|
------------ -----
|0          |JUN  |
有没有办法做到这一点


注意:我更新了我的问题,因为它不清楚。很抱歉,我第一次无法正确提问。

如果我理解得很好,您可能需要以下内容:

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

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

如果要在一次查询中获得结果,请执行以下操作:

select to_char(SCHEDULED_DATE, 'mon-yyyy'), 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 = '439'
group by to_char(SCHEDULED_DATE, 'mon-yyyy');
如果您还想为不同的seq执行此操作,您可以执行以下操作:

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;

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

我不理解您的问题。您的查询将只返回一行。但是您显示的是一个三行的结果集。@GordonLinoff否我给出了一个示例,该查询从我的程序中动态获取
seq
month
值。我重复一遍:您问题中的查询将只返回一行。如果没有匹配的行,则计数将为零。你的整个问题没有意义。也许你应该问另一个问题,并展示更完整的代码。似乎你编写的查询将准确返回这些数字:5月2,6月0,7月1。你是说输出有问题吗?如果是,什么?@mathguy我已经更新了我的查询,请看一看你能解释一下什么是
参数
dual
参考吗to@TonyRoczz参数只是我给日期的别名,这里描述了dual