2016-09-16 4 views
0
Select To_char(x.Fld004, 'dd/mm/yyyy hh24'), 
     max(decode(fld008,1,count(1),null)) as aa, 
     max(decode(fld008,2,count(1),null)) as bb 
    From Pti020 x, Pti042 y 
Where x.Fld008 = y.Fld001 
    And x.fld004 < trunc(sysdate-1) 
    and x.fld004 > trunc(sysdate-2) 
Group By To_char(x.Fld004, 'dd/mm/yyyy hh24') 
order by To_char(x.Fld004, 'dd/mm/yyyy hh24'), aa, bb; 

なぜ実行中に00937エラーが発生しますか?どのように解決することができますか?クエリを実行中にグループ化するとエラーが発生する

答えて

0

通常、集計関数をネストしません。ここで

select To_char(x.Fld004, 'dd/mm/yyyy hh24'), 
     sum(case when fld008 = 1 then 1 else 0 end) as aa, 
     sum(case when fld008 = 2 then 1 else 0 end) as bb 
from Pti020 x join 
    Pti042 y 
    on x.Fld008 = y.Fld001 
where x.fld004 < trunc(sysdate-1) and 
     x.fld004 > trunc(sysdate-2) 
group By to_char(x.Fld004, 'dd/mm/yyyy hh24') 
order by To_char(x.Fld004, 'dd/mm/yyyy hh24'); 

変更されています:おそらく、あなたはより多くのこのようなクエリを意図し

  • ,は、明示的なJOINに置き換えられました。適切な明示的なJOIN構文を使用する必要があります。
  • 集計関数は、2つの列の "1"と "2"の値を数えます。フラグが必要な場合は、sum()の代わりにmax()を使用してください。
  • group byは、最初の列が一意であることを保証するため、order byからaabbを削除しました。
+0

パフォーマンスのために、 'group by'と' order by'節の両方から 'to_char'を削除することもお勧めします。 –

+0

@DmitryGrekov - OPは日付と時間でグループ化したいので、少なくともフィールドリストとGROUP BYにはTRUNC(x.FLD004、 'HH24') 'が必要です。 –

+0

@BobBravis、はい私は目が見えませんでした。しかし、とにかく 'To_char(x.Fld004、 'dd/mm/yyyy hh24')でソートするのは、日付でソートするほど妥当ではありません。 –

関連する問題