如何规范化新列中的列值?

How to normalize column values in new column?

我下面table中的数据,val1,val2,val3都是double类型的。 x 表示记录具有旧值,y 表示新值。因此,我们需要根据 x 和 y 值

连接相应 col (oldVal,newVal) 中的所有双精度值
ID,region,status,val1,val2,val3
1, aa,    x,    10,  11,  13
1, aa,    y,    12,  14,  15
2, bb,    x,    null,  null,  null
2, bb,    y,    null,  null,  null

预期输出,oldVal,newVal是varchar类型

ID,region,oldVal,newVal
1, aa,10-11-13, 12-14-15
1, bb,null, null

如何对此进行反规范化以获得预期的输出?

注意:如果 (val1, val2, val3) 中有任何值为 null,则不应考虑 null 值。

1,2,null > 1-2

您可以尝试将条件聚合函数与CONCAT_WS函数一起使用。

SELECT ID,
       region,
       MAX(CASE WHEN status = 'x' THEN CONCAT_WS('-',val1,val2,val3) END) oldVal,
       MAX(CASE WHEN status = 'y' THEN CONCAT_WS('-',val1,val2,val3) END) newVal
FROM T
GROUP BY ID,region

sqlfiddle