
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
31.10.2016, 10:45
|
|||
|---|---|---|---|
Не работает условие в partition by |
|||
|
#18+
Доброе утро! Есть таблица с данными (во вложении). есть номер клиента (CUSTOMER_NUMBER), имя клиента (CUSTOMER_NAME) и вид участника (MEMBER_TYPE). необходимо в отдельное поле вывести итого по клиенту по полю Вид участника, по определенным условиям. Если по клиенту поле Вид участника имеет значения 1 и 2, то итоговая принимает значение 1. Если по клиенту поле Вид участника имеет значения 1, 2 и 3, то итоговая принимает значение 3. Если по клиенту поле Вид участника имеет значения только 2 то итоговая принимает значение 2. В общем группирую с помощью over (partition by d.customer_number), но вот с условиями проблема. Попробовала использовать case, но условие не срабатывает, работает только функция min, которая по группе вытаскивает минимальное значени. Подскажите пожалуйста в чем ошибка? select d.customer_number,d.customer_name,d.member_type, min(case when d.member_type = 1 and d.member_type <> 3 then 1 when d.member_type = 3 then 3 when d.member_type = 2 and d.member_type not in(1,3) then 2 end) over (partition by d.customer_number) as itogo_cust from table1 d ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.10.2016, 11:32
|
|||
|---|---|---|---|
|
|||
Не работает условие в partition by |
|||
|
#18+
hum_i, В вашем случае case работает для каждой строки, после чего выбирается минимальное значение. В Вашем случае было бы логичнее сначала вычислить min и max по группе (может быть подсчитав все отдельные варианты), а потом уже поставить результирующее условие в case. Например, если max()=3 то 3, если max()=1 то 1, если min()=1 то 1, если min()=2 то 2. :) Хотя Вы не описали ситуацию 1,3 (ну и просто 3). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.10.2016, 11:37
|
|||
|---|---|---|---|
Не работает условие в partition by |
|||
|
#18+
hum_iто итоговая принимает значение 1Знаешь, итого - это когда что-нибудь складывают. hum_iно вот с условиями проблема.Это правильное видение ситуации, а в теме - ламерский бред. hum_iПодскажите пожалуйста в чем ошибка?Анализировать надо агрегат, а не каждлую строку: Код: plsql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.11.2016, 11:21
|
|||
|---|---|---|---|
Не работает условие в partition by |
|||
|
#18+
Elichum_iто итоговая принимает значение 1Знаешь, итого - это когда что-нибудь складывают. hum_iно вот с условиями проблема.Это правильное видение ситуации, а в теме - ламерский бред. hum_iПодскажите пожалуйста в чем ошибка?Анализировать надо агрегат, а не каждлую строку: Код: plsql 1. 2. 3. 4. 5. 6. Сделала такую агрегацию, в общем работает сейчас. Сейчас оно работает при условии что поле MEMBER_TYPE (описанное выше) принимает только значения 1, 2 и 3. в конструкции case работает все через хард код. НО вот если добавиться новое значение для MEMBER_TYPE, например 4, то overall_member_type вернет null. Можно ли этот процесс сделать более автоматизированным? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.11.2016, 11:51
|
|||
|---|---|---|---|
|
|||
Не работает условие в partition by |
|||
|
#18+
hum_i, Нужно сделать таблицу-справочник, которая реализует задачу case ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=52&mobile=1&tid=1887023]: |
0ms |
get settings: |
8ms |
get forum list: |
22ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
92ms |
get topic data: |
11ms |
get forum data: |
9ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 252ms |
| total: | 451ms |

| 0 / 0 |
