将重复记录插入临时表

时间:2017-06-02 09:31:37

标签: teradata

我有一张带有重复记录的表ABC。我想使用Bteq将重复记录仅插入到同一模式中的另一个表ABC_DUPE中。 有什么建议吗?

谢谢, 穆克什

1 个答案:

答案 0 :(得分:0)

您可以使用QUALIFY语句来识别和输出重复项:

由于您没有共享您的表...然后考虑以下ABC表:

+----+----+----+
| f1 | f2 | f3 |
+----+----+----+
|  1 | a  | x  |
|  1 | b  | y  |
|  2 | a  | z  |
|  2 | b  | w  |
|  2 | a  | n  |
+----+----+----+

使用字段f1f2确定唯一记录的位置。在此示例中,f1=2 and f2='a'f3zn重复的记录。要输出这些,我们使用qualify

SELECT *
FROM ABC
QUALIFY COUNT(*) OVER (PARTITION BY f1, f2) > 1;

QUALIFY使用Window函数确定要包含在输出记录集中的记录。这里我们使用窗口函数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);