甲骨文逐行合并



抱歉,如果我没有正确格式化所有内容,这是我第一次在这里发帖,很抱歉英语不好。

我有一个大查询,返回如下内容:

col1 | col2 |col3|col4
==========================
A    |A1    |A2  |01/01/20
A    |A1    |A3  |01/02/20
A    |' '   |' ' |20/02/20
B    |' '   |' ' |01/01/20
C    |C1    |C2  |01/01/20
C    |C1    |C3  |01/02/20

我想将此结果插入到这样的表中:

col1 | col2 |col3|col4
==========================
A    |A1    |A3  |01/02/20
B    |' '   |' ' |01/01/20
C    |C1    |C3  |01/02/20

我尝试了类似的东西:

MERGE INTO dest_table d
USING (SELECT ....) a 
on a.col1 = d.col1
WHEN NOT MATCHED THEN INSERT
WHEN MATCHED THEN IF col2 = ' ' THEN do nothing ELSE compare date and keep the most recent one

当我这样做时,它会插入每一行

我希望它的工作方式是这样的:

  • 插入"A;答1;A2",因为不匹配
  • "一;答1;A3"是匹配的,因为"A"之前刚刚插入,所以输入"匹配"大小写
  • "A;';''"与上一个相同

我可以用"合并到"做类似的事情吗,还是应该尝试另一种方法?

SELECT DISTINCT col1,
FIRST_VALUE(col2) OVER (PARTITION BY col1 
ORDER BY CASE WHEN col2 = '  ' 
THEN DATE '1980-01-01'
ELSE col4
END DESC) col2,
FIRST_VALUE(col3) OVER (PARTITION BY col1 
ORDER BY CASE WHEN col2 = '  ' 
THEN DATE '1980-01-01'
ELSE col4
END DESC) col3,
FIRST_VALUE(col4) OVER (PARTITION BY col1 
ORDER BY CASE WHEN col2 = '  ' 
THEN DATE '1980-01-01'
ELSE col4
END DESC) col4
FROM test
ORDER BY col1;

小提琴

最新更新