【发布时间】:2017-11-03 15:52:51
【问题描述】:
我有一个包含重复记录的表 ABC。我只想使用 Bteq 将重复记录插入到同一架构中的另一个表 ABC_DUPE 中。 有什么建议吗?
谢谢, 穆克什
【问题讨论】:
标签: teradata
我有一个包含重复记录的表 ABC。我只想使用 Bteq 将重复记录插入到同一架构中的另一个表 ABC_DUPE 中。 有什么建议吗?
谢谢, 穆克什
【问题讨论】:
标签: teradata
您可以使用QUALIFY 语句来识别和输出重复:
既然你没有共享你的表...那么考虑以下ABC 表:
+----+----+----+
| f1 | f2 | f3 |
+----+----+----+
| 1 | a | x |
| 1 | b | y |
| 2 | a | z |
| 2 | b | w |
| 2 | a | n |
+----+----+----+
通过使用字段f1 和f2 确定唯一记录。在此示例中,f1=2 and f2='a' 的记录与 f3 值 z 和 n 重复。要输出这些,我们使用qualify:
SELECT *
FROM ABC
QUALIFY COUNT(*) OVER (PARTITION BY f1, f2) > 1;
QUALIFY 使用窗口函数来确定输出记录集中包含哪些记录。这里我们使用窗口函数COUNT(*) 通过我们唯一的复合键f1, f2 进行分区。我们只保留该分区上的Count(*) 大于1 的记录。
这将输出:
+----+----+----+
| f1 | f2 | f3 |
+----+----+----+
| 2 | a | z |
| 2 | a | n |
+----+----+----+
您可以在CREATE TABLE 语句中使用它,例如:
CREATE TABLE ABC_DUPE AS
(
SELECT *
FROM ABC
QUALIFY COUNT(*) OVER (PARTITION BY f1, f2) > 1
) PRIMARY INDEX (f1, f2);
【讨论】: