2016-11-30 2 views
0

Учитывая это входные данные:SQLite транспонирования с помощью рекурсивной КТР

SEQ_ID SP_ID MASK STRING G_ID DEPTH PRESSURE 
97 52361796 1 1 1 5.37 1941.0 
97 52361796 1 1 2 5.77 1986.0 
97 52361796 1 1 3 6.65 1922.0 
.... 
97 52361800 1 1 1 5.76 1926.0 
97 52361800 1 1 2 5.39 1922.0 
97 52361800 1 1 3 6.85 2092.0 

Как я транспонировать это следующим образом:

SP_ID MASK P_01 ... P_027 D_01 D_027 
52321798 2 0 ... 2084.0 ... 0 ... 2084.0 ... 
52361796 1 1941.0 ... 0 ... 5.37 ... 0 ... 
52361800 1 1926.0 ... 0 ... 5.76 ... 0 ... 

код до сих пор, что созданный выше вывод:

CREATE TEMP VIEW IF NOT EXISTS vInteractive AS 
    SELECT 
     SP_ID 
     , MASK 
     , SUM(CASE WHEN G_ID=1 THEN PRESSURE END) AS P_01 
     , SUM(CASE WHEN G_ID=27 THEN PRESSURE END) AS P_27 
     , SUM(CASE WHEN G_ID=1 THEN DEPTH END) AS D_01 
     , SUM(CASE WHEN G_ID=27 THEN DEPTH END) AS D_27 
    FROM vGun 
    GROUP BY SP_ID 
    ORDER BY SP_ID 
    ; 

Мне было интересно, если вместо этого подхода грубой силы кодирования n числа строк, я могу сделать что-то умнее с рекурсивным CTE.

Это то, что я знаю максимум G_ID, чтобы наложить кепку на рекурсию.

ответ

1

A CTE имеет фиксированное количество столбцов, поэтому это невозможно.

Смежные вопросы