如何在Oracle中的单个结果记录中合并多行数据?

时间:2018-12-07 06:34:42

标签: mysql sql oracle

对于DBT_C_MT_MSG_DET,我们从以下简单的结果开始

PROD_REF_ID SUB_FLD TAG_NO  TAG_VAL_1

GF41800427  1       32A     24-Oct-2018
GF41800427  2       32A     SGD
GF41800427  3       32A     7829.43

通过将其与其他表和条件以及所有条件结合起来,我需要基于SUB_FLD值将TAG_VAL_1依次放置以用于特定的PROD_REF_ID。

所需结果:

PROD_REF_ID TAG_NO  Date            Currency    Amount

GF41800427  32A     24-Oct-2018     SGD         7829.43

我尝试使用下面的方法作为select的一部分,但随后我获得了3条记录,另外两条为null:

  case when sub_fld = 1 then tag_val_1 end as tag32A_Date,
  case when sub_fld = 2 then tag_val_1 end as tag32A_Curr,
  case when sub_fld = 3 then tag_val_1 end as tag32A_Amt,

意外结果:

TAG32A_DATE     TAG32A_CURR     TAG32A_AMT  PROD_REF_ID

24-Oct-2018                                 GF41800427  
                SGD                         GF41800427  
                                7829.43     GF41800427  

建议。

1 个答案:

答案 0 :(得分:1)

您需要使用诸如max()或min()之类的聚合函数

select PROD_REF_ID,
max(case when sub_fld = 1 then tag_val_1 end) as tag32A_Date,
max(case when sub_fld = 2 then tag_val_1 end) as tag32A_Curr,
max(case when sub_fld = 3 then tag_val_1 end) as tag32A_Amt
from tablename 
group by PROD_REF_ID