SQL - первые n ненулевых столбцов - PullRequest
0 голосов
/ 04 мая 2020

У меня есть 30 столбцов, таких как p1, p2, p3, ......, p29, p30. Из них любые 6 последовательных значений будут ненулевыми, а все остальные не равны.

Мне нужно написать запрос SQL (предпочтительно Redshift), чтобы получить все из них в 6 столбцах. Скажите а1, а2, а3, а4, а5, а6

Например. Если у меня есть 50 строк данных с 30 столбцами с большим количеством нулей. Я превращу его в 50 строк данных с этими 6 ненулевыми значениями строки.

1 Ответ

1 голос
/ 04 мая 2020

Нет простого способа сделать это. Один из способов - отключить, а затем повторно агрегировать - при условии, что у вашей таблицы есть первичный ключ:

select pk,
       max(case when seqnum = 1 then p end) as q1,
       max(case when seqnum = 2 then p end) as q2,
       max(case when seqnum = 3 then p end) as q3,
       max(case when seqnum = 4 then p end) as q4,
       max(case when seqnum = 5 then p end) as q5,
       max(case when seqnum = 6 then p end) as q6
from (select pk, p, row_number() over (partition by pk order by which) as seqnum
      from ((select pk, 1 as which, p1 as p from t) union all
            (select pk, 2 as which, p2 as p from t) union all
            . . . 
           ) t
      where p is not null
     )  t
group by pk
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...