Я пытаюсь создать таблицу из другой таблицы.Задача состоит в том, чтобы сравнить 3 разных столбца, в которых разные столбцы равны нулю.
- Будет "сравнивать ItemID1, ItemID2 и ItemID3, брать только те, которые имеют значение в нем, и помещать их в одну строку"
- Нет, всегда будет самым большим.Если столбец состоит из Да и Нет, будет выбрано Нет
- Обратите внимание.У одного CustomerID может быть несколько разных ItemID
Пример 1
+------------+---------+---------+---------+------------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 | Value |
+------------+---------+---------+---------+------------+
| 1 | abc | xyz | cde | Yes |
| 1 | abc | null | cde | No |
| 1 | null | xyz | cde | No |
| 1 | abc | xyz | cde | No |
| 1 | iop | tyu | ghj | Yes |
| 1 | iop | null | ghj | Yes |
| 1 | iop | tyu | ghj | Yes |
| 1 | null | tyu | ghj | Yes |
+------------+---------+---------+---------+------------+
Ожидаемый результат будет
+------------+---------+---------+---------+-------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 | Value |
+------------+---------+---------+---------+-------+
| 1 | abc | xyz | cde | No |
| 1 | iop | tyu | ghj | Yes |
+------------+---------+---------+---------+-------+
Пример 2
+------------+---------+---------+---------+------------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 | Value |
+------------+---------+---------+---------+------------+
| 1 | qwe | null | asd | No |
| 1 | qwe | null | asd | Yes |
| 1 | null | null | asd | Yes |
| 1 | qwe | null | asd | Yes |
+------------+---------+---------+---------+------------+
Ожидаемый результат будет
+------------+---------+---------+---------+-------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 | Value |
+------------+---------+---------+---------+-------+
| 1 | qwe | null | asd | No |
+------------+---------+---------+---------+-------+
Пример 3
+------------+---------+---------+---------+------------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 | Value |
+------------+---------+---------+---------+------------+
| 1 | fgh | null | zxc | Yes |
| 1 | fgh | xyv | zxc | Yes |
| 1 | null | null | zxc | Yes |
| 1 | fgh | null | zxc | Yes |
+------------+---------+---------+---------+------------+
Ожидаемый результат будет
+------------+---------+---------+---------+-------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 | Value |
+------------+---------+---------+---------+-------+
| 1 | fgh | xyv | zxc | Yes |
+------------+---------+---------+---------+-------+
То, что я пробовал.
Iпопробовал в, коды ниже.но получать неправильные результаты.Кажется, что он берет только первое, основанное на ItemID1
Пробный пример
+------------+---------+---------+---------+------------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 | Value |
+------------+---------+---------+---------+------------+
| 1 | fgh | null | zxc | Yes |
| 1 | fgh | xyv | zxc | No |
| 1 | null | null | zxc | Yes |
| 1 | fgh | null | zxc | Yes |
| 1 | iop | tyu | ghj | Yes |
| 1 | iop | null | ghj | Yes |
| 1 | iop | tyu | ghj | Yes |
| 1 | null | tyu | ghj | Yes |
| 2 | abc | xyz | cde | Yes |
| 2 | abc | null | cde | No |
| 2 | null | xyz | cde | No |
| 2 | abc | xyz | cde | No |
+------------+---------+---------+---------+------------+
Результат Возврат
+------------+---------+---------+---------+-------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 | Value |
+------------+---------+---------+---------+-------+
| 1 | fgh | null | zxc | Yes |
| 1 | iop | tyu | ghj | Yes |
| 2 | abc | xyz | cde | Yes |
+------------+---------+---------+---------+-------+
Ожидаемый результат будет
+------------+---------+---------+---------+-------+
| CustomerID | ItemID1 | ItemID2 | ItemID3 | Value |
+------------+---------+---------+---------+-------+
| 1 | fgh | xyz | zxc | No |
| 1 | iop | tyu | ghj | Yes |
| 2 | abc | xyz | cde | No |
+------------+---------+---------+---------+-------+
Код, который я пробовал.
INSERT INTO NEW_TABLE
(CustomerID,
ItemID1,
ItemID2,
ItemID3,
Value)
SELECT
CustomerID,
ItemID1,
ItemID2,
ItemID3,
Value
FROM (SELECT
CustomerID,
ItemID1,
ItemID2,
ItemID3,
Value,
row_number() OVER(PARTITION BY ItemID1 ORDER BY ETA DESC)rn
FROM ETA_TABLE)
WHERE rn = 1