2016-11-08 44 views
-1

我有一個表中包含一些帶有日期字段的數據。如何在表中找不到數據時獲取缺省值的行

例:

|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 | 

反正是有爲了達成這個?

注:我更新了我的問題,因爲它不清楚。對不起,我第一次沒有正確地問。

+0

我不明白你的問題。您的查詢將返回完全一行。但是,您顯示的結果集有三行。 –

+0

@GordonLinoff不,我給出了一個例子,這個查詢從我的程序 –

+0

中動態獲取'seq'和'month'值。 。我再說一遍:在你的問題中的查詢將返回*完全*一行。如果沒有行匹配,計數將爲零。你的整體問題沒有意義。也許你應該問另一個問題,並顯示更完整的代碼。 –

回答

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 
+0

可以請你解釋什麼'參數'和'雙'參考 –

+0

@TonyRoczz參數只是我給日期的別名,雙是描述[here](http://docs.oracle.com/數據庫/ 121/SQLRF/queries009.htm#SQLRF20036) – Aleksej

0

您的查詢會給你期望的結果。

如果你想要得到的結果在一個查詢請做到:

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'); 

如果你也想這樣做,對於不同的序列,你可以這樣做:

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端進行處理。

相關問題