Teradata:将多个字段组合成具有多列的单行

Terdata: Combining multiple fields into Single Row with multiple Colums

我希望在 teradata 中实现以下转换,将多行合并为一行并将第三列中的值转换为单独的列。请参阅 link 中给出的图像。我有以下约束 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

这是标准 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