Oracle SQL запрашивает одну строку только с месячным значением, но необходимо сгруппировать ее по месяцам

#sql #database #oracle

#sql #База данных #Oracle

Вопрос:

Я не могу определить правильный запрос в Oracle SQL, у меня есть следующие данные:

 Name    Monthly_amount   Start_date 
Bob     100              April 2014
Mike    120              June 2014
Steve   80               Sept 2014
Bob     50               Dec 2014
  

И я хотел бы получить следующий результат

 Name |Jan-14| Feb-14| Mar-14| Apr-14 |May-14| Jun-14| Jul-14 |Aug-14|Sep-14|Oct-14| Nov-14| Dec-14
Bob   0       0       0       100     100    100      100     100    100    100     100      150 
Mike  0       0       0       0       0      120      120     120    120    120     120      120 
Steve 0       0       0       0       0      0        0       0      80     80      80       80 
  

Комментарии:

1. start_date Столбец объявлен как DATE или a VARCHAR2 ?

2. Вам нужно посмотреть сводный запрос.

3. я не знаком с oracle, но вы пробовали документы: oracle.com/technetwork/articles/sql/11g-pivot-097235.html

Ответ №1:

Что-то вроде этого должно сработать для вас. Если вам нужно, чтобы определения столбцов были динамическими, вам придется создавать их динамически, но лучше делать такие вещи в вашем приложении.

 SELECT Name,
  SUM(CASE WHEN Start_date <= TO_DATE('01-JAN-2014','DD-MON-YYYY')
      THEN Monthly_Amount ELSE 0 END) AS Jan14,
  SUM(CASE WHEN Start_date <= TO_DATE('01-FEB-2014','DD-MON-YYYY')
      THEN Monthly_Amount ELSE 0 END) AS Feb14,
(etc.)
FROM table1
GROUP BY Name;
  

(Предполагается, что Name это однозначно определяет человека)

Комментарии:

1. Думаете, что, по крайней мере, нужно sum позаботиться о дополнительных 50 Боба в декабре?

2. спасибо, ваше решение работает как шарм. есть ли простой способ добавить сумму в последнюю строку, чтобы подвести итог всему месяцу?