teradata中同一声明中的两个限定条款

时间:2017-01-12 09:58:21

标签: sql teradata

我有一个要求,我认为我需要在同一声明中使用两个限定条款。

我需要两个第一列,其中包含正确的iD'(duplicate_cnt = 1),另一列包含所有其他ID(dup_cnt> 1)。 基于这些值,我必须更新另一个表。这在teradata有可能吗?

这是我的表:

Name    Description  Code   Data_Source
A   XX  101 SCRM
A   XX  102 SCRM
A   XX  103 SCRM
A   XX  104 SCRM
A   XX  105 SCRM
A   XX  110 BSCRM

这就是我想要的:

Name    Description Correct_code    Incorrect code  Data_Source
A   XX  101 102 SCRM
A   XX  101 103 SCRM
A   XX  101 104 SCRM
A   XX  101 105 SCRM

谢谢, AB

1 个答案:

答案 0 :(得分:1)

如何定义"正确"代码,最低值?

使用FIRST_VALUE获取最低值和累积计数以查找其他代码:

SELECT 
   Name
   ,Description
   ,First_Value(Code) -- lowest code
    Over (PARTITION BY Data_Source --, Name, Description?
          ORDER BY code) AS Correct_code
   ,code AS Incorrect_code
   ,Data_Source
FROM dropme
QUALIFY
   Count(*) -- only return rows with additional codes
   Over (PARTITION BY Data_Source --, Name, Description?
         ORDER BY code
         ROWS Unbounded Preceding) > 1

编辑:

只要订单&数据列是相同的,你也可以使用简单的

   ,MIN(Code) -- lowest code
    Over (PARTITION BY Data_Source --, Name, Description?
         ) AS Correct_code