сортировка столбцов в строке SQlite - PullRequest
1 голос
/ 07 мая 2020

У меня есть такая таблица

tbl1
    w1  w2  w3  w4   w5   w6
    4   6    2  17   29    3

Я пытаюсь получить такой вывод

new_C1   new_C2 new_C3    new_C4  New_C5  New_C6
 2         3    4            6      17     29

мой фрагмент кода ниже, но он не работает со столбцом 3 и 4

SELECT
MIN(w1,w2,w3,w4,w5,w6) AS new_c1,
CASE MIN(w1,w2,w3,w4,w5,w6) 
                         WHEN w1 THEN MIN(w2, w3, w4,w5,w6)
                         WHEN w2 THEN MIN(w1, w3, w4,w5,w6)
                         WHEN w3 THEN MIN(w1, w2, w4,w5,w6)
                         WHEN w4 THEN MIN(w1, w2, w3,w5,w6)
                         WHEN w5 THEN MIN(w1, w2, w3,w4,w6)
                         WHEN w6 THEN MIN(w1, w2, w3,w4,w5)
                         END AS new_c2,
CASE MIN(w1,w2,w3,w4,w5,w6) 
                         WHEN w1 THEN MIN(w2, w3, w4,w5,w6)
                         WHEN w2 THEN MIN(w1, w3, w4,w5,w6)
                         WHEN w3 THEN MIN(w1, w2, w4,w5,w6)
                         WHEN w4 THEN MIN(w1, w2, w3,w5,w6)
                         WHEN w5 THEN MIN(w1, w2, w3,w4,w6)
                         WHEN w6 THEN MIN(w1, w2, w3,w4,w5)
                         END AS new_c3,

CASE MAX(w1,w2,w3,w4,w5,w6) 
                         WHEN w1 THEN MAX(w2, w3, w4,w5,w6)
                         WHEN w2 THEN MAX(w1, w3, w4,w5,w6)
                         WHEN w3 THEN MAX(w1, w2, w4,w5,w6)
                         WHEN w4 THEN MAX(w1, w2, w3,w5,w6)
                         END AS new_c5,
MAX(w1, w2, w3, w4,w5,w6) AS newC6
FROM tb1

Кто-нибудь может помочь мне с кодом в SQLlite? специально для w3 и w4

1 Ответ

0 голосов
/ 07 мая 2020

В SQL Server вы можете использовать боковое соединение (реализовано с помощью cross apply):

select v.*
from t cross apply
     (select max(case when seqnum = 1 then w end) as w1,
             max(case when seqnum = 2 then w end) as w2,
             max(case when seqnum = 3 then w end) as w3,
             max(case when seqnum = 4 then w end) as w4,
             max(case when seqnum = 5 then w end) as w5,
             max(case when seqnum = 6 then w end) as w6
      from (select v.w, row_number() over (order by v.w) as seqnum
            from (values (w1), (w2), (w3), (w4), (w5), (w6)) v(w)
           ) v
     ) v

SQLite не имеет аналогичных функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...