У меня есть требование, в котором мне нужно ввести вычисляемый столбец, чтобы показать, отсутствует ли тип A, B или C.
- Служба может иметь от одного до многих типов (существует 10 различных «Типов»).
- Сервис должен иметь все 3 «Типа»: AB и C.
- Если отсутствует какой-либо из 3, мне нужно показать, какой «Тип» отсутствует.
Например, если Service ID 2 имеет тип A, тогда в вычисляемом столбце должно быть указано «Тип B и C отсутствует», если Service ID 3 имеет Type B, тогда вычисляемый столбец должен скажем, тип A и C отсутствует "et c ...
Я получил расчет, чтобы сказать" Тип AB или C отсутствует ", но у меня нет времени, чтобы разбить его на конкретные c Тип отсутствует. В конечном итоге я объединю этот результат с несколькими другими похожими запросами. Может ли кто-нибудь помочь с этим?
SELECT ri.service_id,
ri.name,
ri.creation_date,
'Type A B or C is missing' AS missing
FROM service ri
WHERE ri.special = 'Yes'
AND ri.service_id NOT IN (SELECT DISTINCT ri.service_id
FROM service ri,
service_cust rfni,
cust rfn
WHERE ri.service_id = rfni.service_id
AND rfni.cust_id = rfn.cust_id
AND ri.special = 'Yes'
AND rfn.TYPE IN( 'A', 'B', 'C' )
GROUP BY ri.service_id
HAVING Count(DISTINCT rfn.TYPE) = 3)
Thanks`
CREATE TABLE SERVICE
(service_id VARCHAR(50),
name VARCHAR( 50 ),
special VARCHAR( 50 )
)
Insert into SERVICE (service_id,name,special) values ('1','Service1','Yes');
Insert into SERVICE (service_id,name,special) values ('2','Service2','Yes');
Insert into SERVICE (service_id,name,special) values ('3','Service3','Yes');
Insert into SERVICE (service_id,name,special) values ('4','Service4','Yes');
Insert into SERVICE (service_id,name,special) values ('5','Service5','Yes');
Insert into SERVICE (service_id,name,special) values ('6','Service6','Yes');
Insert into SERVICE (service_id,name,special) values ('7','Service7','Yes');
Insert into SERVICE (service_id,name,special) values ('8','Service8','Yes');
Insert into SERVICE (service_id,name,special) values ('9','Service9','No');
CREATE TABLE SERVICE_CUST
(cust_id VARCHAR(50),
service_id VARCHAR( 50 )
)
Insert into SERVICE_CUST (cust_id,service_id) values ('1','1');
Insert into SERVICE_CUST (cust_id,service_id) values ('2','1');
Insert into SERVICE_CUST (cust_id,service_id) values ('3','1');
Insert into SERVICE_CUST (cust_id,service_id) values ('4','1');
Insert into SERVICE_CUST (cust_id,service_id) values ('5','2');
Insert into SERVICE_CUST (cust_id,service_id) values ('6','3');
Insert into SERVICE_CUST (cust_id,service_id) values ('7','4');
Insert into SERVICE_CUST (cust_id,service_id) values ('8','4');
Insert into SERVICE_CUST (cust_id,service_id) values ('9','5');
CREATE TABLE CUST
(cust_id VARCHAR(50),
type VARCHAR( 50 )
)
Insert into CUST (cust_id,type) values ('1','A');
Insert into CUST (cust_id,type) values ('2','B');
Insert into CUST (cust_id,type) values ('3','C');
Insert into CUST (cust_id,type) values ('4','D');
Insert into CUST (cust_id,type) values ('5','A');
Insert into CUST (cust_id,type) values ('6','B');
Insert into CUST (cust_id,type) values ('7','A');
Insert into CUST (cust_id,type) values ('8','B');
Insert into CUST (cust_id,type) values ('9','F');
при выполнении этого запроса
select ri.service_id, ri.name, rfn.type
from service ri, service_cust rfni, cust rfn
where ri.service_id = rfni.service_id
and rfni.cust_id = rfn.cust_id
and ri.special = 'Yes'
Я получаю
1 Service1 A 1 Service1 B 1 Service1 C 1 Service1 D 2 Service2 A 3 Service3 B 4 Service4 A 4 Service4 B 5 Service5 F
Мне нужны только те услуги, которые отсутствует Тип A, B или C. Если в нем есть все 3 (A, B, C), тогда не нужно видеть в результатах. Поэтому я ищу результаты Service2 с текстом 'Missing B, C 'Service3 с текстом' Missing A, C 'Service4 с текстом' Missing C '
я думаю, что мой первый p искусство исходного запроса не работает должным образом, так как его ввод: Сервис 2,3,4,5,6,7 и 8
select ri.service_id, ri.name
from service ri
where ri.special = 'Yes'
and ri.service_id not in (
select distinct ri.service_id
from service ri, service_cust rfni, cust rfn
where ri.service_id = rfni.service_id
and rfni.cust_id = rfn.cust_id
and ri.special = 'Yes'
and rfn.type in( 'A','B', 'C')
group by ri.service_id
having count(distinct rfn.type)=3)
спасибо за помощь
`