2014-09-27 2 views
0

что наиболее эффективным способом сделать этот запрос:агрегатной SQL/Join над не взаимоисключающий переменными

У меня есть 5 столбцов в таблице: A (уникальные идентификтор), B (группировка переменный), C (группировка переменная), D (значение даты), E (числовое значение) и F (числовое значение), где столбец D = вчера.

B и C не являются взаимоисключающими. Мне нужно найти сумму (E) и сумму (E, где E> 0) для всех C, без другого фильтра в это время, кроме даты (столбец D). Затем мне нужно найти, опять же без какого-либо другого фильтра, кроме столбца D, все B, где sum (E) = 0. Мне нужно, чтобы из этого извлечения был все A, присоединенный к этому последнему запросу с B и E. Затем мне нужно присоединиться эти значения A с суммами запросов на EI выполнялись для C. Я не понимаю, как наиболее эффективный способ сделать это с точки зрения вычислительной эффективности.

Есть ли способ, которым я мог бы выполнить первый запрос всех записей, где D = вчера, и манипулировать данными локально оттуда, а не запускать несколько запросов с внешней базой данных?

спасибо.

Edit:

Таблица:

Column A Column C Column B Column D Column E Column F 
1   A   A   09/26/2014  50  1000     
2   A   B   09/26/2014  -20  300 
3   A   C   09/26/2014  80  23500   
4   B   A   09/26/2014  -50  5000 
5   B   B   09/26/2014  40  3100 
6   B   C   09/26/2014  10  4500 
1   A   A   09/25/2014  50  1000     
2   A   B   09/25/2014  -20  300 
3   A   C   09/25/2014  80  23500   
4   B   A   09/25/2014  -50  5000 
5   B   B   09/25/2014  40  3100 
6   B   C   09/25/2014  10  4500 

Мой Желаемый результат:

Column A Column C Column B Column D Column E Column F Sum(E on C/D) Sum(E > 0 on C/D) 
1   A   A   09/26/2014  50  1000   110    130 
4   B   A   09/26/2014  -50  5000    0     50 
+0

Редактировать квест ион и добавить данные образца и желаемые результаты. Ваше описание действительно, очень трудно следовать. –

+0

Извиняется за неудачную работу по форматированию таблицы. – WestSideStory

+0

Все еще довольно запутанно, как вы получили 110 в столбце Sum (E on C/D) для результата или 130 для Sum (E> 0 на C/D). Не могли бы вы снова проверить свой вопрос и исправить, если что-то нужно исправить. – user1897277

ответ

0

Учитывая ваш предписанных в технических заданиях таблице следующий запрос даст вам на указанный вами желаемый результат

select min(columna) keep 
     (dense_rank first 
      order by columnb) columna 
    , columnc 
    , min(columnb) columnb 
    , columnd 
    , min(columne) keep 
     (dense_rank first 
      order by columnb) columne 
    , min(columnf) keep 
     (dense_rank first 
      order by columnb) columnf 
    , sum(columne) sume_1 
    , sum(case 
      when columne > 0 then columne 
      else 0 
      end) sume_2 
from mytable 
where columnd = to_date('09/26/2014', 'MM/DD/YYYY') 
group by columnc 
     , columnd 
Смежные вопросы