Разделение данных столбца на несколько столбцов в кусте - PullRequest
0 голосов
/ 28 мая 2018

У меня есть пример данных для устройства, которое содержит два контроллера и его версию.Пример данных выглядит следующим образом:

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 Ответ

0 голосов
/ 28 мая 2018

Чтобы "сложить" все строки с заданным ключом в одну строку, вы должны выполнить агрегацию .Даже если вы на самом деле не агрегируете значения на практике.

Что-то вроде
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 вы не сможете добиться большего успеха)

...