#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
или aVARCHAR2
?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. спасибо, ваше решение работает как шарм. есть ли простой способ добавить сумму в последнюю строку, чтобы подвести итог всему месяцу?