2016-11-08 3 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で、私は私が私が値2を取得し、出力は次のようであるMAYの月のこのクエリを実行すると

を実行する前に、各月の代替値を更新します。

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

しかし、私は0として表示する必要がJUN月の

が、出力は私の所望の出力は、この

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

のようなものです。この

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

のようなものですが、とにかくありこれを達成するには?

注:明らかにされていない質問を更新しました。申し訳ありませんが、最初に正しく質問できませんでした。

+0

私はあなたの質問を理解していません。クエリでは1行だけが返されます。しかし、3行の結果セットを表示しています。 –

+0

@ GordonLinoffいいえ、私の例では、このクエリは、私のプログラム –

+0

から動的に 'seq'と' month'値を取得します。 。繰り返します:あなたの質問のクエリは*正確に* 1行を返します。一致する行がない場合、カウントはゼロになります。あなたの全体的な質問は理にかなっていません。おそらく、別の質問をしてより完全なコードを表示する必要があります。 –

答えて

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パラメータは、日付に与えた単なるエイリアスです、デュアルは[ここ](http://docs.oracle.com/データベース/ 121/SQLRF/queries009.htm#SQLRF20036) – Aleksej

0

を。

使用すると、1つのクエリで結果を取得したい場合は行ってください。

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側で処理することができます。

関連する問題