|
|
|
Не работает условие в 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, 10:45 |
|
||
|
Не работает условие в 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:32 |
|
||
|
Не работает условие в partition by
|
|||
|---|---|---|---|
|
#18+
hum_iто итоговая принимает значение 1Знаешь, итого - это когда что-нибудь складывают. hum_iно вот с условиями проблема.Это правильное видение ситуации, а в теме - ламерский бред. hum_iПодскажите пожалуйста в чем ошибка?Анализировать надо агрегат, а не каждлую строку: Код: plsql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2016, 11:37 |
|
||
|
Не работает условие в 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:21 |
|
||
|
Не работает условие в partition by
|
|||
|---|---|---|---|
|
#18+
hum_i, Нужно сделать таблицу-справочник, которая реализует задачу case ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2016, 11:51 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39337630&tid=1887023]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
163ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 294ms |
| total: | 546ms |

| 0 / 0 |
