Как отобразить несколько строк на одной строке - PullRequest
0 голосов
/ 14 ноября 2018

Я работаю над запросом, который содержит несколько строк для определенного идентификатора, и я надеюсь отобразить их все в одной строке.

В данный момент у меня есть запрос:

SELECT 

person_id,
car_name,
car_year, 
car_value,
car_mileage

FROM tbl_motor_vehicles

Это возвращает следующее:

person_id     car_name     car_year      car_value       car_mileage
---------------------------------------------------------------------
1       TOYOTA YARIS      2017          5000            10000
1       Nissan Micra      2001          1000            15000
2       Golf                            15000           700000
2       Fiat Punto        2002          2500            60000

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

Person ID    Car_1_NAME    Car_1_year       car1_value     car1_mileage     Car_2_NAME    Car_2_year       car2_value    car2_mileage
--------------------------------------------------------------------------------------------------------------------------------------
1        TOYOTA YARIS     2017              5000         10000        Nissan Micra       2001             1000          15000
2           Golf          2007              15000       700000        Fiat Punto         2002             2500          60000

Может кто-нибудь посоветовать мне, как идтиоб этом?

1 Ответ

0 голосов
/ 14 ноября 2018

SQL-запрос имеет фиксированное количество столбцов. Таким образом, вы можете показать только фиксированный набор автомобилей для каждого человека. С этим предупреждением вы можете использовать условное агрегирование:

SELECT person_id,
       MAX(CASE WHEN seqnum = 1 THEN car_name END) as car_name_1,
       MAX(CASE WHEN seqnum = 1 THEN car_year END) as car_year_1,
       MAX(CASE WHEN seqnum = 1 THEN car_value END) as car_value_1,
       MAX(CASE WHEN seqnum = 1 THEN car_mileage END) as car_mileage_1,
       MAX(CASE WHEN seqnum = 2 THEN car_name END) as car_name_2,
       MAX(CASE WHEN seqnum = 2 THEN car_year END) as car_year_2, 
       MAX(CASE WHEN seqnum = 2 THEN car_value END) as car_value_2,
       MAX(CASE WHEN seqnum = 2 THEN car_mileage END) as car_mileage_2
FROM (SELECT mv.*, ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY (SELECT NULL)) as seqnum
      FROM tbl_motor_vehicles mv
     ) mv
GROUP BY person_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...