2015-06-17 4 views
0

Я хочу добиться следующего преобразования в терадате: объединение нескольких строк в одну строку и преобразование значений в третьем столбце в отдельные столбцы. См. Изображение, указанное в ссылке. У меня есть следующее ограничение: столбцы seq_id масштабируемы.Тердата: объединение нескольких полей в одиночную строку с несколькими столбцами

данных:

ticket_num  seq_id err_cde  
--------------------------------- 
AKOZ01   a   23  
AKOZ02   a   51  
AKOZ03   a   48  
AKOZ04   a   7  
AKOZ05   a   10  
AKOZ06   a   20  
AKOZ07   b   51  
AKOZ08   b   51  
AKOZ10   b   48  
AKOZ11   b   20  
AKOZ12   b   5  
AKOZ13   c   48  
AKOZ14   c   23  
AKOZ15   c   7  
AKOZ16   c   10  
AKOZ17   c   10  
AKOZ18   c   7  
AKOZ19   d   20  
AKOZ20   d   10  
AKOZ21   d   7  
AKOZ22   d   7  
AKOZ23   d   48  
AKOZ24   d   10  
AKOZ25   d   51  

Результат:

seq_id err_cde1 err_cde2 err_cde3 err_cde4 err_cde5 err_cde6 err_cde7  
------------------------------------------------------------------------------------------- 
a  23   51   48   7   10   20   0  
b  51   51   48   20   5   0   0  
c  48   23   7   10   10   7   0  
d  20   10   7   7   48   10   51   

Sample Data

ответ

0

Это стандартный SQL-подход, назначить номер строки на основе ticket_num, а затем сделать MAX (CASE):

SELECT 
    seq_id, 
    MAX(CASE WHEN rn = 1 THEN err_cde ELSE 0 end) AS err_cde1, 
    MAX(CASE WHEN rn = 2 THEN err_cde else 0 end) AS err_cde2, 
    MAX(CASE WHEN rn = 3 THEN err_cde else 0 end) AS err_cde3, 
    MAX(CASE WHEN rn = 4 THEN err_cde else 0 end) AS err_cde4, 
    MAX(CASE WHEN rn = 5 THEN err_cde else 0 end) AS err_cde5, 
    MAX(CASE WHEN rn = 6 THEN err_cde else 0 end) AS err_cde6, 
    MAX(CASE WHEN rn = 7 THEN err_cde ELSE 0 end) AS err_cde7 
FROM 
(
    SELECT 
     seq_id, 
     err_cde, 
     ROW_NUMBER() 
     OVER (PARTITION BY seq_id 
      ORDER BY ticket_num) AS rn 
    FROM tab 
) AS dt 
GROUP BY seq_id 
Смежные вопросы