Я использую Oracle 11.1.1.9.0, и моя цель - заполнить пустые значения первыми значениями NOT NULL в столбце «Сырье» для каждого продукта, т. Е. A, B и C в столбце Product. Пример таблицы и предполагаемый результат показаны в конце этого запроса.
Ни один из кодов, указанных ниже, не работает:
КОД 1:
IFNULL(Raw Materials,
First_value(Raw Materials) OVER (PARTITION BY Product))
КОД 2:
IFNULL(Raw Materials,
First_value(Raw Materials) OVER (PARTITION BY Product
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW))
КОД 3:
COALESCE(lag(Raw Materials ignore null) OVER (partition by Product),
Raw Materials)
КОД 4:
IFNULL (Сырье, ОЦЕНИТЬ ('LAG (% 1, 1)) более (PARTITION BY% 2) 'AS varchar2 (20), Сырье, продукт))
Примечание: функция IFNULL работает в окружающей среде. Он был протестирован с помощью IFNULL («Сырье», «1»), и в столбце «Сырье» все нулевые значения стали равными 1.
Спасибо.
+---------+----------+ +---------+----------+
| product | material | | product | material |
+---------+----------+ +---------+----------+
| A | | | A | Apple |
| A | | | A | Apple |
| A | | | A | Apple |
| A | | | A | Apple |
| A | Apple | | A | Apple |
| B | | | B | Orange |
| B | | | B | Orange |
| B | | => | B | Orange |
| B | | | B | Orange |
| B | Orange | | B | Orange |
| C | | | C | Banana |
| C | | | C | Banana |
| C | | | C | Banana |
| C | | | C | Banana |
| C | Banana | | C | Banana |
+---------+----------+ +---------+----------+
Left is the example table data. Right is the intended result.
Ссылка ниже "Oracle кодовая среда "показывает кодовую среду и примеры функции Oracle Logical SQL. Oracle код среды
Oracle Логическое SQL Руководство: https://docs.oracle.com/middleware/11119/biee/BIEUG/appsql.htm#CHDDCFJI