2016-06-26 2 views
1

во-первых, извините за неопределенный заголовок не был уверен, как его объяснить. Опираясь на запрос ниже, я хочу вытащить инциденты, где присутствовал «truck1». Не только по себе, но и с другими автомобилями. Я уверен, что это что-то прямое, но не может это решить.Как выбрать на основе ненормализованного столбца

select 
i.incident_number 
Vehicles, 
countofvehicles 

FROM 

(


SELECT 


i.Incident_Number, 
array_agg(ir.RESOURCE) as vehicle, 
count(ir.RESOURCE) as countofvehicles 



FROM INCIDENT as i 
JOIN RESOURCE as ir on i.Incident_Number = ir.Incident_Number 

--WHERE ir. like '%Truck1%' 

GROUP BY i.Incident_Number) i 

Результат

incident_Number  vehicle    countofvehicle 
    1    car1,car2,bike1     3 
    2    car1,car2,truck1    3 
    3    truck1       1 
    4    car1       1 

Если бы я хотел, чтобы увидеть, где только случаи truck1 присутствовали, используя ГДЕ ir.RESOURCE как «% truck1% будет только вернуть падающее число 3, а не случай 2, где его с другими транспортными средствами. Как я могу обойти это, пожалуйста?

Благодаря

ответ

0

Вам не нужен подзапрос для этого, только having пункта:

SELECT i.Incident_Number, 
     array_agg(ir.RESOURCE) as vehicle, 
     count(ir.RESOURCE) as countofvehicles 
FROM INCIDENT i JOIN 
    RESOURCE ir 
    ON i.Incident_Number = ir.Incident_Number 
GROUP BY i.Incident_Number 
HAVING SUM(CASE WHEN ir.RESOURCE like '%truck1% THEN 1 ELSE 0 END) > 1; 

На самом деле, вы, вероятно, не нужно join либо, потому что единственное поле вы от INCIDENT также находится в RESOURCE:

SELECT ir.Incident_Number, 
     array_agg(ir.RESOURCE) as vehicle, 
     count(ir.RESOURCE) as countofvehicles 
FROM RESOURCE ir 
GROUP BY ir.Incident_Number 
HAVING SUM(CASE WHEN ir.RESOURCE like '%truck1% THEN 1 ELSE 0 END) > 1; 
Смежные вопросы