2011-07-19 12 views
0

これまでのところ、私は基本的に結果に1または0の値を割り当てるこのケース・ステートメントを使用しました。 これを微調整して、2番目の列(日付情報)を追加します。oracle case文のヘルプ

はここで今働いてcase文です:

select 
    case when count(*) = 0 then 1 else 0 end result 
from Table1 
where 
    to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') >= trunc(sysdate)-1; 

結果は次のとおりです。

RESULT 
---------- 
    0 

を今、私は同じ結果セットの同じ日付の情報(to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') >= trunc(sysdate)-1)を取得したいです。

ワンパスでこれを行う方法はありますか?結果は私が取得したいと思います:

MYDT  RESULT 
------ --------- 
18-JUL-11  0 

答えて

3

あなたのデータに応じて、これを行うにはいくつかの方法があります。

例えば

日付に複数の値を持っていますが、常にあなたはあなたがする必要があると思い日付でカウントするようにしたい場合は、しかし、

With Totalcount as (select 
    case when count(*) = 0 then 1 else 0 end result 
from Table1 
where 
    to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') >= trunc(sysdate)-1) 

SELECT DISTINCT 
     to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') MYDT, 
     totalcount.result 
FROM 
    Table1 , Totalcount 
where 
    to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') >= trunc(sysdate)-1 

を行うことができます*のカウントをしたいことができるかどう

select 
    to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') as mydt, 
    case when count(*) = 0 then 1 else 0 end result 
from Table1 
where 
    to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') >= trunc(sysdate)-1 
GROUP BY 
    to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') 
+0

ありがとうございます。 2人目はトリックをしました。それを明確にしてくれてありがとう。はい、基本的に前日のデータが存在するかどうかを確認する必要があります。これが原因でカウントされた理由です。 – cjd143SD

0
select 
    to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') as mydt, 
    case when count(*) = 0 then 1 else 0 end result 
from Table1 
where 
    to_date(year||'/'||month||'/'||day, 'YYYY/MM/DD') >= trunc(sysdate)-1;