SQL CASE THEN оператор, где ID имеет несколько значений - PullRequest
0 голосов
/ 08 января 2020

Мне нужно написать запрос, чтобы получить окончательный вывод одного идентификатора человека с флагами, если у него есть машина или грузовик.

Ожидаемый результат:

Person_ID | Truck | Car 
   1         Y       Y

Запрос, который я написал, извлекает данные из таблицы, имеющей несколько идентификаторов, поэтому вывод повторяется.

Базовые данные:

SELECT DISTINCT PERSON_ID, VEHICLE_TYPE 
FROM CARS

Вывод:

PERSON_ID | VEHICLE_TYPE
  1         Car
  1         Truck

Мой запрос:

SELECT PERSON_ID, 
CASE WHEN VEHICLE_TYPE = 'TRUCK' THEN 'Y' ELSE 'N' END AS TRUCK,
CASE WHEN VEHICLE_TYPE = 'CAR' THEN 'Y' ELSE 'N' END AS CAR
FROM (
SELECT DISTINCT PERSON_ID, VEHICLE_TYPE
FROM CARS
)

Окончательный вывод:

Person_ID | Truck | Car 
1           Y       N
1           N       Y

У человека есть и грузовик, и машина, но удостоверение личности повторяется. Есть ли способ решить эту проблему?

1 Ответ

2 голосов
/ 08 января 2020

Вы можете сделать условное агрегирование:

select 
    person_id,
    max(case when vehicle_type = 'TRUCK' then 'Y' else 'N' end) truck,
    max(case when vehicle_type = 'CAR' then 'Y' else 'N' end) car
from cars
group by person_id
...