У меня есть таблица со следующим ddl.Добавление строк, число запусков, текущая сумма для запроса результатов
CREATE TABLE "LEDGER"
("FY" NUMBER,
"FP" VARCHAR2(20 BYTE),
"FUND" VARCHAR2(20 BYTE),
"TYPE" VARCHAR2(2 BYTE),
"AMT" NUMBER
)
В таблице указаны следующие данные.
REM INSERTING into LEDGER
SET DEFINE OFF;
Insert into LEDGER (FY,FP,FUND,TYPE,AMT) values (15,'03','A','03',1);
Insert into LEDGER (FY,FP,FUND,TYPE,AMT) values (15,'04','A','03',2);
Insert into LEDGER (FY,FP,FUND,TYPE,AMT) values (16,'04','A','03',3);
Insert into LEDGER (FY,FP,FUND,TYPE,AMT) values (12,'05','A','04',6);
на основе раздела FY Ф.П. фонда и типа я хотел бы написать запрос, чтобы сохранить текущий счет с начала FP (FP, хотя это VARCHAR представляет собой число в месяц . iE 2 равно февральскому, а 3 - маршу и т. д.) до жесткого числа 14. Поэтому, внимательно изучив данные, вы заметите, что в FY 15 максимальный период равен 04, поэтому я должен добавить еще 10 периодов в мой отчет получите мой отчет за полные 14 периодов. вот ожидаемый результат.
вот что я пытался, но я просто просто спотыкаюсь об этом.
WITH fy_range AS
(
SELECT MIN (fy) AS min_fy
, MAX (fy) AS max_fy
FROM ledger
),all_fys AS
(
SELECT min_fy + LEVEL - 1 AS fy
FROM fy_range
CONNECT BY LEVEL <= max_fy + 1 - min_fy
)
,all_fps AS
(
SELECT TO_CHAR (LEVEL, 'FM00') AS fp
FROM dual
CONNECT BY LEVEL <= 14
)
SELECT
FUND
,G.TYPE
,G.FY
,G.FP
,LAST_VALUE(G.AMT ignore nulls) OVER (PARTITION BY G.FUND ORDER BY Y.FY P.FP) AS AMT
FROM all_fys y
CROSS JOIN all_fps p
LEFT OUTER JOIN LEDGER G PARTITION BY(FUND)
ON g.fy = y.fy
AND g.fp = p.fp;
но в итоге я получаю кучу нулей и некоторые странные результаты.
Итак, что вы пытались? – OldProgrammer
@OldProgrammer Я добавил свою попытку ниже вопроса – Miguel
Несколько вещей, которые я не понимаю ... Если FP должен быть месяцем (2 = февраль), то почему он проходит через 14, а не через 12? Возможно, FY предназначен для представления года, и вам нужно, чтобы «счет» продлился до февраля следующего года? Или что? И другой вопрос, если вам нужен «текущий счет», разделённый FY, FP, Fund и Type, почему подсчет для FY = 12 начинается со значения 10, а затем остается постоянным в 10? Это ни подсчет, ни сумма, и, похоже, это не «подсчет». (Я предполагаю, что вы хотите работать с SUM, а не с COUNT, но вам все равно нужно объяснять) – mathguy