如何规范新列中的列值



我在表中有以下数据,val1,val2,val3是双重类型。x表示记录具有旧值,y表示新值。因此,我们需要基于x和y值将各个列(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

相关内容

  • 没有找到相关文章

最新更新