在编写棘手的查询时,我需要您的帮助。情况如下
应排除具有属性A,I,Z的位置(这很简单)。但是有一个例外。当location包含A和I属性的组合时-不应将其排除(即,不应排除Bangalore)。 而德里(不包括属性A和Q)。因此查询的输出应如下所示。
排除查询很简单,如下所示
<merged>{collection('/my/folder/')}</merged>
但是需要扩展它以考虑属性A和I的异常。
答案 0 :(得分:1)
一种方法是根据位置分组并计算不同属性的数量。通过使用case语句,您可以仅匹配相关属性:
SELECT location
FROM mytable
GROUP BY location
HAVING COUNT(DISTINCT CASE WHEN attribute IN ('A', 'I') THEN 1 END) = 2 OR
COUNT(DISTINCT CASE WHEN attribute IN ('A', 'I', 'Z') THEN 1 END) = 0
答案 1 :(得分:0)
这是第三个选项:
SELECT t.LOCATION
FROM TABLE t
WHERE t.ATTRIBUTE NOT IN ( 'A','I','Z' )
OR ( t.ATTRIBUTE = 'A'
AND EXISTS( SELECT 1
FROM TABLE t2
WHERE t.LOCATION = t2.LOCATION
AND t2.ATTRIBUTE = 'I' ) )