#sql #oracle #unpivot
#sql #Oracle #unpivot
Вопрос:
Это операторы таблицы, я хочу преобразовать данные во что-то непривычное, например, используя только sql.
create table galy(
pro_Date date,
profit number
);
insert into galy values(sysdate-1,30);
insert into galy values(sysdate,20);
insert into galy values(sysdate 1,40);
insert into galy values(sysdate 2,50);
insert into galy values(sysdate 3,70);
commit;
Вывод, необходимый в одном запросе (даты, имеющие сб и воскресенье, не должны учитываться)
Date d-1 d d 1
01-02-2018(sysdate) 30 20 40
....
....
Ответ №1:
Для отображения данных в нужном формате pivot / unpivot не требуется. Пока есть только 1 PRO_DATE
в день, вы можете использовать LEAD
LAG
аналитические функции and .
Запрос
SELECT pro_date,
LAG (profit) OVER (ORDER BY pro_date) AS prior_day_profit,
profit AS current_day_profit,
LEAD (profit) OVER (ORDER BY pro_date) AS next_day_profit
FROM galy;
Результат
PRO_DATE PRIOR_DAY_PROFIT CURRENT_DAY_PROFIT NEXT_DAY_PROFIT
____________ ___________________ _____________________ __________________
04-OCT-20 30 20
05-OCT-20 30 20 40
06-OCT-20 20 40 50
07-OCT-20 40 50 70
08-OCT-20 50 70
Обновить
Чтобы исключить выходные, вы можете просто добавить предложение where в свой запрос
SELECT pro_date,
LAG (profit) OVER (ORDER BY pro_date) AS prior_day_profit,
profit AS current_day_profit,
LEAD (profit) OVER (ORDER BY pro_date) AS next_day_profit
FROM galy
WHERE TO_CHAR (pro_date, 'DY') NOT IN ('SAT', 'SUN');