Настройте запрос оракула с помощью предложения groupby
У меня есть таблица с большим количеством столбцов стоимости для каждой таблицы ключей.
SK1 SK2 Col1 Col2 Col3..... Col50 Flg(Да / Нет)
1 2 10 20 30 ...... 500 Y
1 2 10 20 30 ...... 500 N
2 2 10 20 30 ...... 500 N
Мне нужно агрегировать (сумма) всех значений, а затем проверить, есть ли какие-либо значения с Y, а затем добавить их в новую таблицу B. Здесь таблица A комбинация записей (1,2) для (sk1,sk2) должна быть возвращена.
Я написал запрос, чтобы выбрать LISR всех столбцов и добавить в качестве группы. У нас много данных, поэтому выполнение этого запроса занимает слишком много времени. Любой шанс взглянуть на это и сделать так, чтобы он стал быстрее.
выберите Sk1, Sk2, nvl(sum(col3),0), nvl(sum(col4))0, ..... nvl(sum(col50)) из группы таблиц A по Sk1, Sk2
Я использую это как часть большого запроса, где во многих других вычислениях выполняются поверх этого.
3 ответа
На данный момент я создал временную таблицу и загрузил в нее все данные.
Выяснить, содержит ли какой-либо из сгруппированных набор записей "Y", будет так же просто, как...
select ...
from ...
group by ...
having max(flg) = 'Y'
Если вы используете это как часть большого запроса, вы использовали опцию 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
Больше помощи здесь