Вывести одно значение по всем строкам, если хотя бы одно из значений столбца N равно 'abde'?
Нужно написать условие, которое выводит значение в соответствии с условием, в разрезе по каждому уникальному ID:
- Если хотябы одно из значений поля
parsравноabde, то по всем строкам для этого ID вывести abde - Если поле
parsНЕ имеет значениеabde, но имеет значениеs, то вывести s - Если в поле
parsНЕ найдено значенийabdeилиs, то Null
| id | pars | new_value |
|---|---|---|
| 115465 | abde | abde |
| 115465 | s | abde |
| 115465 | null | abde |
| 28785 | s | s |
| 28785 | m | s |
| 49 | wow | null |
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Не знаю, как это решается оптимально, но вроде можно было бы так:
- делаем выборку из таблицы и формируем через
CASE ... WHEN ... THEN 1 as flag1поле со значением 1 где выполняется первое условие - тоже самое для второго условия
- делаем поверх вышеуказанной выборки селект с группировкой по
IDи вычислениемSUM(flag1), SUM(flag2) - делаем на том же уровне проверку этих сумм > 0 через тот же
CASE ... WHEN ... THEN ... ELSE ..., формируя поле с требуемыми значениями на выходе - делаем
SELECTиз нашей таблицы иJOINк ней результата вышеописанных манипуляций поID
Автор решения: ValNik
→ Ссылка
По идее, высказанной @CrazyElf, но через оконные функции
select *
,case when sum(case when pars='abde' then 1 else 0 end)over(partition by id)>0
then 'abde'
when sum(case when pars='s' then 1 else 0 end)over(partition by id)>0
then 's'
else null -- это необязательно, но понятнее
end new_value
from test