Как загрузить данные за предыдущий год, если данные за этот год недоступны - PullRequest
0 голосов
/ 12 февраля 2019

ТАБЛИЦА: ИСПЫТАНИЕ

Batch   Year    Value
----------------------
A   2014    11
A   2015    0
A   2016    22
A   2017    0
A   2018    13
B   2015    10
B   2016    0
B   2017    29
B   2018    0
C   2013    24
C   2014    0
D   2015    27
D   2016    0

Здесь для каждой партии предположим, что в 2015 году нет данных, для этого нужно взять данные за 2014 год, аналогично, если данные недоступны в конкретном году для конкретной партии, а затем данные из предыдущего годадолжен быть выделен на этот год.

Я пытался поместить оператор case, используя только пакет A, но проблема в том, что мой запрос показывает, что подзапрос возвращает несколько строк.

SELECT BATCH, YEAR,
(CASE WHEN VALUE = 0 THEN
(SELECT A.VALUE FROM TEST A, TEST B WHERE A.YEAR = B.YEAR-1 AND A.VALUE <> '0') ELSE VALUE END)
FROM TEST;

Требуется Таблица вывода:

Тест

Batch   Year    Value
---------------------
A   2014    11
A   2015    11
A   2016    22
A   2017    22
A   2018    13
B   2015    10
B   2016    10
B   2017    29
B   2018    29
C   2013    24
C   2014    24
D   2015    27
D   2016    27

1 Ответ

0 голосов
/ 12 февраля 2019

Я использовал запрос ниже для достижения вашего результата,

CREATE TABLE TEST1(Batch VARCHAR(10), Year INT, Value INT)
INSERT INTO TEST1
VALUES('A', 2014,11),
('A', 2015,0 ),
('A', 2016,22),
('A', 2017,0 ),
('A', 2018,13),
('B', 2015,10),
('B', 2016,0 ),
('B', 2017,29),
('B', 2018,0 ),
('C', 2013,24),
('C', 2014,0 ),
('D', 2015,27),
('D', 2016,0 )

SELECT batch, year, CASE WHEN value = 0  then LAG(value) OVER(PARTITION BY batch ORDER BY year) ELSE value END AS value
FROM TEST1
ORDER BY batch, year
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...