Свернуть колонки по агрегации обновляя значения, но пропуская null
Имеется таблица:
+-----+---------+------+----------+
| Agg | Version | Col1 | Col2 |
+-----+---------+------+----------+
| a | 1 | 12 | "hi1" |
| a | 2 | null | "hi2" |
| b | 1 | 1 | "bText" |
| b | 2 | 5 | null |
| b | 3 | null | "bText2" |
+-----+---------+------+----------+
необходимо сделать вьюху или функцию, где результат из таблицы свернуть до уникальных значений в Agg и так, чтобы значения в ColN было последним по колонке Version . null учитывать не нужно (кроме случая, где все значения пустые). В итоге должна получиться таблица:
+-----+---------+------+----------+
| Agg | Version | Col1 | Col2 |
+-----+---------+------+----------+
| a | 2 | 12 | "hi2" |
| b | 3 | 5 | "bText2" |
+-----+---------+------+----------+
Сервер MS SQL 2016
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
SELECT DISTINCT
Agg,
MAX(Version) OVER (PARTITION BY Agg) Version,
FIRST_VALUE(col1) OVER (PARTITION BY Agg ORDER BY CASE WHEN col1 IS NULL THEN 0 ELSE Version END DESC) col1,
FIRST_VALUE(col2) OVER (PARTITION BY Agg ORDER BY CASE WHEN col2 IS NULL THEN 0 ELSE Version END DESC) col2
FROM test;