Teradata - OLAP函数 - 过滤行

时间:2018-02-02 18:09:24

标签: teradata

我想知道我是否可以使用OLAP函数来过滤不相关的行,如下所示:

如果我有一个匹配值(第四个字段),则不得显示具有相同键的所有行(前3个字段)

在此示例中,匹配值为“C”:

       Entities     product     ID     Solde
        997          0050          123     D
        997          0050          123     D
        997          0050          123     C
        899          0124          125     D
        899          0124          125     D

所以这里我的密钥由实体/产品/ ID组成,关于我需要显示的“Solde”的值。

这里不需要的值是Solde = C.

在此示例中,只应显示最后一行,因为键899/0124/125仅包含solde ='D'的行

键997/0050/123有一行solde ='C'所以我不想显示它

提前感谢您的帮助

克里斯托弗

2 个答案:

答案 0 :(得分:2)

更新回答

更常见的解决方法是首先选择您不想要的实体/产品/ ID记录。

 SELECT Entities, Product, ID FROM table WHERE Solde<>'D';

在WHERE子句的子查询中使用该结果来排除这些结果:

SELECT DISTINCT Entities, Product, ID, Solde
FROM table
WHERE (Entities, Product, ID) NOT IN ( SELECT Entities, Product, ID FROM table WHERE Solde<>'D');

或者使用HAVING子句并聚合

SELECT Entities, Product, ID
FROM table
COUNT(*) = SUM(CASE WHEN Solde = 'D' THEN 1 ELSE 0 END)
GROUP BY 1,2,3

答案 1 :(得分:0)

I guess you are looking for answer as the below:

SELECT Solde FROM yourtable QUALIFY COUNT(*) OVER (PARTITION BY Entities, Product, ID, Solde) = 1;