我想知道我是否可以使用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'所以我不想显示它
提前感谢您的帮助
克里斯托弗
答案 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;