|
|
|
Помогите с запросом исключения записей
|
|||
|---|---|---|---|
|
#18+
Есть 2 таблицы. Абоненты и Контракты. Все контракты уникальны и имеют статус(открыт, закрыт, архив и др.) У Абонента может быть один или несколько контрактов. Подскажите пожалуйста, как вывести Абонентов, у которых 2 и более контрактов и все со статусом закрыт. Вот запрос, который выводит абонентов у которых несколько контрактов со статусом Закрыт: SELECT S.CORP_NAME, S.CORP_INN FROM CX_SEARCH S INNER JOIN CX_CONTRACT C ON S.AGRM_ID = C.ROW_ID WHERE C.OU_TYPE_CD = 'Юридическое лицо' AND C.X_TYPE_COMMUNICATION= 'Фиксированный' AND C.CUST_STAT_CD = 'Закрыт' GROUP BY S.CORP_NAME, S.CORP_INN HAVING COUNT (S.CORP_NAME) > 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 11:07 |
|
||
|
Помогите с запросом исключения записей
|
|||
|---|---|---|---|
|
#18+
chuwees, либо [not] exists-подзапрос либо считать агрегацию по всем данным, фильтруя статусы в HAVING (через case/decode) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 11:11 |
|
||
|
Помогите с запросом исключения записей
|
|||
|---|---|---|---|
|
#18+
Щукина Анна, Спасибо большое за наводку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2018, 16:03 |
|
||
|
Помогите с запросом исключения записей
|
|||
|---|---|---|---|
|
#18+
Прежде чем задавать такие вопросы, хорошо бы предоставить отношение между таблицами, существующие индексы, тестовые данные и ожидаемый результат. Предположим, что C.ROW_ID это не уникальный ключ, а указатель на абонента Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2018, 10:21 |
|
||
|
Помогите с запросом исключения записей
|
|||
|---|---|---|---|
|
#18+
Popipo, Да, косяк. Не судите строго, я только учусь) Оказалось так, как ты сказал. И мой запрос неправильный. Таблица CX_CONTRACT - дочерняя, а CX_SEARCH - родительская. Я написал такой запрос и вроде работает: SELECT S.CORP_NAME, S.CORP_INN FROM CX_SEARCH S WHERE EXISTS (SELECT * FROM CX_MTS_CONTRACT C WHERE S.ROW_ID = C.MASTER_OU_ID AND C.CUST_STAT_CD = 'Закрыт' GROUP BY C.MASTER_OU_ID HAVING COUNT(*) > 1) AND NOT EXISTS (SELECT * FROM CX_MTS_CONTRACT C WHERE P.ROW_ID = C.MASTER_OU_ID AND C.CUST_STAT_CD <> 'Закрыт') Обязательно попробую твой способ в целях повышения скила. Большое спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2018, 13:06 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39690291&tid=1883570]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
197ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 490ms |

| 0 / 0 |
