Всем доброго времени суток! Столкнулся с такой проблемой, есть запрос который возвращает
| 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
Комментариев нет:
Отправить комментарий