powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сложный запрос
3 сообщений из 3, страница 1 из 1
Сложный запрос
    #38411079
PunK_HS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Есть три таблицы с приблизительно одинаковой структурой
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE LINK_ORDERS_TOPERATIONS (
    ID                D_TPKEY /* D_TPKEY = INTEGER NOT NULL */,
    DOC_NUMBER        D_CHAR10 /* D_CHAR10 = VARCHAR(10) */,
    DOC_DATE          D_DATE /* D_DATE = DATE */,
    ID_ORDER          D_TFKEY /* D_TFKEY = INTEGER NOT NULL */,
    DATE_TOPERATIONS  D_DATE /* D_DATE = DATE */,
    ID_OWNER          D_TFKEY /* D_TFKEY = INTEGER NOT NULL */,
    ID_UNITS          D_TFKEY /* D_TFKEY = INTEGER NOT NULL */,
    ID_TOPERATION     D_TFKEY /* D_TFKEY = INTEGER NOT NULL */,
    PRICE             "D_NUM(10,3)" DEFAULT 0 /* "D_NUM(10,3)" = NUMERIC(10,3) */,
    COST              "D_NUM(10,3)" DEFAULT 0 /* "D_NUM(10,3)" = NUMERIC(10,3) */
);

Необходимо сформировать две таблицы, одна из которых (главная) будет выводить месяц и год (т.е. сентябрь 2013, октябрь 2013 и т.д.), а другая (детальная) - суммы по полю COST с группировкой по ID_UNITS для месяца + года из главной части.
С детальной таблицой все вроде просто:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select
EXTRACT(MONTH FROM loo.date_operations),
EXTRACT(YEAR FROM loo.date_operations),
loo.id_units,
du.name,
sum(loo.cost)
from link_orders_operations loo
inner join di_units du on du.id = loo.id_units
group by loo.id_units, du.name,  EXTRACT(MONTH FROM loo.date_operations), EXTRACT(YEAR FROM loo.date_operations)

Как теперь связать все это с главной?
...
Рейтинг: 0 / 0
Сложный запрос
    #38411090
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PunK_HS,

Если я правильно понял что нужно, то вот

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
WITH RECURSIVE T1 (DATE_BEGIN, DATE_END)
AS (SELECT DATE '01.01.2000',
           DATE '01.01.2006'
    FROM RDB$DATABASE),
R
AS (SELECT DATEADD(1 MONTH TO DATE_BEGIN) AS DATE_BEGIN,
           DATE_END,
           EXTRACT(YEAR FROM DATE_BEGIN) AS BYYEAR,
           EXTRACT(MONTH FROM DATE_BEGIN) AS BYMONTH
    FROM T1
    UNION ALL
    SELECT DATEADD(1 MONTH TO DATE_BEGIN),
           DATE_END,
           EXTRACT(YEAR FROM DATE_BEGIN) AS BYYEAR,
           EXTRACT(MONTH FROM DATE_BEGIN) AS BYMONTH
    FROM R
    WHERE DATE_BEGIN < DATE_END)
SELECT BYYEAR,
       BYMONTH
FROM R  



или

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
EXECUTE BLOCK (
    DATE_BEGIN DATE = :DATE_BEGIN,
    DATE_END DATE = :DATE_END)
RETURNS (
    BYYEAR INTEGER,
    BYMONTH INTEGER)
AS
BEGIN
  WHILE (DATE_BEGIN < DATE_END) DO
  BEGIN
    BYYEAR = EXTRACT(YEAR FROM DATE_BEGIN);
    BYMONTH = EXTRACT(MONTH FROM DATE_BEGIN);
    DATE_BEGIN = DATEADD(1 MONTH TO DATE_BEGIN);
    SUSPEND;
  END
END
...
Рейтинг: 0 / 0
Сложный запрос
    #38414465
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PunK_HS,

Из условия задачи неясно, нафига нужна "главная", если "детальная" уже выводит год и месяц.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сложный запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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