Разделение данных столбца на несколько столбцов в кусте
У меня есть пример данных для устройства, которое содержит два контроллера и его версию. Пример данных выглядит следующим образом:
device_id controller_id versions
123 1 0.1
123 2 0.15
456 2 0.25
143 1 0.35
143 2 0.36
Эти данные должны быть в следующем формате:
device_id 1st_ctrl_id_ver 2nd_ctrl_id_ver
123 0.1 0.15
456 NULL 0.25
143 0.35 0.36
Я использовал приведенный ниже код, который не работает:
select
device_id,
case when controller_id="1" then versions end as 1st_ctrl_id_ver,
case when controller_id="2" then versions end as 2nd_ctrl_id_ver
from device_versions
Результат, который я получил:
device_id 1st_ctrl_id_ver 2nd_ctrl_id_ver
123 0.1 NULL
123 NULL 0.15
456 NULL 0.25
143 0.35 NULL
143 NULL 0.36
Я не хочу значения Null в каждой строке. Может ли кто-нибудь помочь мне в написании правильного кода?
1 ответ
Чтобы "сложить" все строки с заданным ключом в одну строку, необходимо выполнить агрегацию. Даже если вы на самом деле не собираете значения на практике.
Что-то вродеselect device_id,
MAX(case when controller_id="1" then versions end) as 1st_ctrl_id_ver,
MAX(case when controller_id="2" then versions end) as 2nd_ctrl_id_ver
from device_versions
GROUP BY device_id
Но имейте в виду, что этот код будет работать тогда и только тогда, когда у вас будет не более одной записи на контроллер на устройство, и любой контроллер с версией выше 2 будет игнорироваться. Другими словами, это довольно хрупко (но в SQL вы не сможете добиться большего успеха)