powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Агрегатные функции для вычисления дохода за два периода
5 сообщений из 5, страница 1 из 1
Агрегатные функции для вычисления дохода за два периода
    #40071773
Sasha5213
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Я только начинаю изучение SQL и ещё не очень хорошо с ним разобрался.
Хотелось бы узнать, есть ли способ одним запросом вывести две суммы за два разных периода?
Мой запрос (будет ниже) выводит только пересекающиеся строки в таблицах, и я никак не могу понять, как мне вывеси всё. Пробовал и left join, и full outer join - ничего не помогает. Данные берутся из двух таблиц - Договор и продукт.

В договоре есть:
номер договора (PK), код продукта, дата договора, сумма

В Продукте:
код продукта (РК), наименование продукта, код типа продукта.

SELECT RDP.PROD_ID AS "Код", RDP.PROD_NAME "Наименование продукта", SUM(C.TOTAL) "Показатель на 4 квартал 2020 года", SUM(C2.TOTAL) "Показатель на 1 квартал 2021 года"
FROM PRODUCT p
LEFT JOIN CONTRACT c
ON P.PROD_ID = C.PROD_ID
LEFT JOIN CONTRACT c2
ON P.PROD_ID = C2.PROD_ID
WHERE C.CONT_DATE BETWEEN TO_DATE('2020-10-01', 'YYYY-MM-DD') AND TO_DATE('2020-12-31', 'YYYY-MM-DD')
AND C2.CONT_DATE BETWEEN TO_DATE('2021-01-01', 'YYYY-MM-DD') AND TO_DATE('2021-03-31', 'YYYY-MM-DD')
AND RDP2.PRTYPE_ID = 1
GROUP BY RDP.PROD_ID, RDP.PROD_NAME, RDC.TOTAL, RDC2.TOTAL;

У меня этот запрос выводит вот это:

Код |Наименование продукта |Показатель на 4 квартал 2020 года|Показатель на 1 квартал 2021 года|
----+-------------------------------------------------------+---------------------------------+---------------------------------+
3|Фьючерсный контракт на обыкновенные акции ПАО «Газпром»| 120536.69| 69582.29|

а должно быть примерно вот так плюс ещё один показатель на квартал.

Код |Наименование продукта |Показатель на 4 квартал 2020 года|
----+--------------------------------------------------------+---------------------------------+
1|Фьючерсный контракт на обыкновенные акции | 46530.56|
2|Фьючерсный контракт на обыкновенные акции | 55945.35|
3|Фьючерсный контракт на обыкновенные акции | 69582.29|
1|Фьючерсный контракт на обыкновенные акции | 62167|

Буду благодарен, если вы сможете подсказать мне.
...
Рейтинг: 0 / 0
Агрегатные функции для вычисления дохода за два периода
    #40071775
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Оформляй код.
2. Не вижу, что такое RDP, RDP2, RDC, RDC2
...
Рейтинг: 0 / 0
Агрегатные функции для вычисления дохода за два периода
    #40071794
Sasha5213
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильный Вася,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT P.PROD_ID AS "Код", 
           P.PROD_NAME   AS "Наименование продукта", 
           SUM(C.TOTAL)  AS "Показатель на 4 квартал 2020 года", 
           SUM(C2.TOTAL) AS "Показатель на 1 квартал 2021 года"
    FROM PRODUCT p
    LEFT JOIN CONTRACT c
    ON P.PROD_ID = C.PROD_ID
    LEFT JOIN CONTRACT c2
    ON P.PROD_ID = C2.PROD_ID
    WHERE C.CONT_DATE BETWEEN TO_DATE('2020-10-01', 'YYYY-MM-DD') AND TO_DATE('2020-12-31', 'YYYY-MM-DD')
    AND C2.CONT_DATE BETWEEN TO_DATE('2021-01-01', 'YYYY-MM-DD') AND TO_DATE('2021-03-31', 'YYYY-MM-DD')
    AND P.PRTYPE_ID = 1
    GROUP BY P.PROD_ID, P.PROD_NAME, C.TOTAL, C2.TOTAL;



RDP, RDP2, RDC, RDC2 - это остатки от прошлых попыток. Не заметил
...
Рейтинг: 0 / 0
Агрегатные функции для вычисления дохода за два периода
    #40071798
ASNexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sasha5213,

А если так
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT P.PROD_ID AS "Код", 
       P.PROD_NAME AS "Наименование продукта", 
       SUM(CASE WHEN C.CONT_DATE BETWEEN TO_DATE('2020-10-01', 'YYYY-MM-DD') AND TO_DATE('2020-12-31', 'YYYY-MM-DD') THEN C.TOTAL ELSE 0 END) AS "Показатель на 4 квартал 2020 года", 
       SUM(CASE WHEN C.CONT_DATE BETWEEN TO_DATE('2021-01-01', 'YYYY-MM-DD') AND TO_DATE('2021-03-31', 'YYYY-MM-DD') THEN C.TOTAL ELSE 0 END) AS "Показатель на 1 квартал 2021 года"
  FROM PRODUCT p
  LEFT JOIN CONTRACT c ON P.PROD_ID = C.PROD_ID
                      AND C.CONT_DATE BETWEEN TO_DATE('2020-10-01', 'YYYY-MM-DD') AND TO_DATE('2020-12-31', 'YYYY-MM-DD')
                       OR C.CONT_DATE BETWEEN TO_DATE('2021-01-01', 'YYYY-MM-DD') AND TO_DATE('2021-03-31', 'YYYY-MM-DD')
 WHERE P.PRTYPE_ID = 1
 GROUP BY P.PROD_ID, P.PROD_NAME;
...
Рейтинг: 0 / 0
Агрегатные функции для вычисления дохода за два периода
    #40071800
Sasha5213
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASNexus, спасибо большое. Сработало!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Агрегатные функции для вычисления дохода за два периода
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]