-2

Key TableAごとに多くのコスト列を持つテーブルがあります

SK1 SK2 Col1 Col2 Col3..... Col50 Flg(Y/N)


1    2    10    20   30 ...... 500  Y
1    2    10    20   30 ...... 500  N
2    2    10    20   30 ...... 500  N

すべての値を集計 (合計) し、Y の値があるかどうかを確認してから、それらを新しい tableB に追加する必要があります。ここで、テーブル (sk1,sk2) のレコードの組み合わせ (1,2) が返されます。

私が書いたクエリは、すべての列の lisr を選択し、グループとして追加することです。大量のデータがあるため、このクエリの実行には時間がかかりすぎます。これを再検討して、より高速になるようにする機会があれば。

select Sk1, Sk2, nvl(sum(col3),0), nvl(sum(col4))0, ..... nvl(sum(col50)) テーブルからSk1, Sk2によるグループ

私はこれを大規模なクエリの一部として使用しており、他の多くの計算がこれに基づいて実行されます。

4

3 に答える 3

0

グループ化された一連のレコードのいずれかに「Y」が含まれているかどうかを調べるのは、次のように簡単です...

select   ...
from     ...
group by ...
having   max(flg) = 'Y'
于 2016-05-24T09:00:19.477 に答える
0

今のところ、一時テーブルを作成し、すべてのデータをそこにロードしました。

于 2016-05-27T05:38:10.703 に答える
-1

これを大きなクエリの一部として使用している場合、WITH オプションを試しましたか?

こんな感じかも

WITH SUM_DATA AS (select col1, col2, nvl(sum(col3),0), nvl(sum(col4))0, ..... nvl(sum(col50)) from table A group by col1, col2)

SELECT xyz 
FROM abc, sum_data
WHERE abc.join_col = sum_data.join_col

詳細はこちら

于 2016-05-23T18:18:36.930 に答える