Страницы

Поиск по вопросам

вторник, 18 июня 2019 г.

Oracle count по условию

Всем доброго времени суток! Столкнулся с такой проблемой, есть запрос который возвращает
| SOT | KUT | K1 | K2 | YADRO | GR | |------|------|----|----|-------|-----| | 2055 | 1,31 | 0 | 3 | 2 | 101 | | 2055 | 1,31 | 0 | 3 | 2 | 101 | | 2055 | 1,31 | 0 | 3 | 2 | 103 | | 2055 | 1,31 | 1 | 0 | 1 | 100 | | 2055 | 1,31 | 0 | 3 | 3 | 102 | | 2055 | 1,31 | 0 | 3 | 3 | 102 |
Где столбцы K1 и K2 расчётные, K1 показывает сколько различных групп(GR) принадлежащих ядру(YADRO) 1 посещает сотрудник (SOT), K2 показывает сколько различных групп(GR) НЕ принадлежащих ядру(YADRO) 1 посещает сотрудник (SOT). Ядра содержат только уникальные группы, в двух разных ядрах группы не повторяются. Запрос
select sot, round(sum(time)over(partition by sot)/25920,2) as Кутил, case when yadro=2 then count(distinct gr)over(partition by sot,case when yadro=2 then 0 else 1 end) else 0 end as K1, case when yadro!=2 then count(distinct gr)over(partition by sot,case when yadro!=2 then 0 else 1 end) else 0 end as K2,
... from ...
Проблема в том что запрос возвращает значения с нулями а нужно чтобы было как то так
| SOT | KUT | K1 | K2 | YADRO | GR | |------ |------ |---- |---- |------- |----- | | 2055 | 1,31 | 1 | 3 | 2 | 101 | | 2055 | 1,31 | 1 | 3 | 2 | 101 | | 2055 | 1,31 | 1 | 3 | 2 | 103 | | 2055 | 1,31 | 1 | 3 | 1 | 100 | | 2055 | 1,31 | 1 | 3 | 3 | 102 | | 2055 | 1,31 | 1 | 3 | 3 | 102 |

Чтобы не было нулей а были общие цифры во всех столбцах, буду очень благодарен за помощь, сразу говорю обёртки предлагать только в крайнем случае, хотелось бы обойтись без лишних подзапросов и т.д.


Ответ

Не уверен , но стоит попробовать вот так :
count(distinct case when yadro=2 then gr else null end )over(partition by sot) as K1

Комментариев нет:

Отправить комментарий