我在表中有以下数据,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