Доброе время суток,
Суть: есть таблица (
DEVICES), в которой, есть
ID заявки (
PROPOSAL_ID) на работу. По каждой заявке может быть разный вид работ (
SORT_WORK_ID), например заявка с
PROPOSAL_ID=30 (а также с разными суммами оплат), для которой вид работ: штукатурка, побелка, покраска соответственно с ID: 1, 2, 3 (
SORT_WORK_ID) см. рис.
Мне нужно каким-то образом, вытягивать PROPOSAL_ID, только тех заявок, для которых пользователь выделил определенный вид работ.
Например:
- Если пользователь выделил вид работ с
SORT_WORK_ID = 1, т.е. «штукатурка», должна находится заявка только с штукотуркой, т.е.
PROPOSAL_ID = 25.
- Если пользователь выделил вид работ с
SORT_WORK_ID = (1,2), то должны находится только заявки с штукатуркой и побелкой, т.е.
PROPOSAL_ID = 28, 29
- Если пользователь выделил вид работ с SORT_WORK_ID = (1,2, 3), то должны находится только заявки с штукатуркой и побелкой и покраской, т.е. PROPOSAL_ID = 30.
Поправка:
И как еще этот запрос ограничить
combobox`ом строгий поиск (галочка стоит) или нет (галочки нет):
-- т.е. если строгий, то в результате запроса в него должны входить (
PROPOSAL_ID) только те виды работ, которые выбрал пользователь (например пользователь выбрал
SORT_WORK_ID = 1, тогда должна выбираться заявка с
PROPOSAL_ID = 25 или
SORT_WORK_ID in (1, 2), то
PROPOSAL_ID = 28, 29);
-- если не строгий, то в результат могут входить заявки с джругими видами работ
SORT_WORK_ID = 1, то в результат попадут все заявки, т.к. все они имеют вид работы равный «1»
Мой вариант (но он не совсем рабочий - при SORT_WORK_ID in (1,2,3) - не работает и не учитывает - "строгий" поиск или нет):
Код:
select q.proposal_ID, count(*) from (select PROPOSAL_ID, SORT_WORK_ID, count(*) p from DEVICES D where
SORT_WORK_ID in (1,2)
group by PROPOSAL_ID, D.SORT_WORK_ID
having count(*) > 1) q
group by PROPOSAL_ID
having count(*) > 1
Заранее спасибо за ответ
P.S.
sql, dialect 3, firebird 3.0.3