与我的要求相关的示例。 我有一张桌子t_policies_details 列pol_ref,inrtyp
inrtyp has values = ORD,PPC,AVCO,DSS,RVP, SP,TV
我想获取polref,其中inrtyp只有SP和TV,没有任何其他。
SELECT DISTINCT p.polref, p.inrtyp FROM t_policies_details p WHERE p.inrtyp NOT IN ('ORD')
INTERSECT
SELECT DISTINCT p.polref, p.inrtyp FROM t_policies_details p WHERE p.inrtyp NOT IN ('PPC')
INTERSECT
SELECT DISTINCT p.polref, p.inrtyp FROM t_policies_details p WHERE p.inrtyp NOT IN ('AVCO')
INTERSECT
SELECT DISTINCT p.polref, p.inrtyp FROM t_policies_details p WHERE p.inrtyp NOT IN ('DSS')
INTERSECT
SELECT DISTINCT p.polref, p.inrtyp FROM t_policies_details p WHERE p.inrtyp NOT IN ('RVP')
我尝试过以上查询,排除不需要的东西, 但这给了我polref,它有SP或TV,或两者兼而有之。我必须再次搜索哪两个都有。 我通过搜索找到了一些。 但是当我把条件包括在内时:
INTERSECT
SELECT DISTINCT p.polref, p.inrtyp FROM t_policies_details p WHERE p.inrtyp IN ('SP')
INTERSECT
SELECT DISTINCT p.polref, p.inrtyp FROM t_policies_details p WHERE p.inrtyp IN ('TV')
我没有得到任何polref。
请帮助我做到这一点。
答案 0 :(得分:1)
如果我理解正确,您希望所有polref
具有inrtyp
的实例同时用于'电视','SP',但根本没有其他值。您可以计算组中所需和不需要的实例数,然后在外部选择中应用逻辑:
WITH cte AS
(
SELECT p.polref,
SUM(CASE WHEN p.inrtyp IN ('TV', 'SP') THEN 1 ELSE 0 END) AS Good,
SUM(CASE WHEN p.inrtyp NOT IN ('TV', 'SP') THEN 1 ELSE 0 END) AS Bad
FROM t_policies_details p
GROUP BY p.polref
)
SELECT cte.polref
FROM cte
WHERE Good = 2 AND Bad = 0;
答案 1 :(得分:0)
从您选择的列列表中删除p.inrtyp
,这样就可以了。如果您在where子句中使用列,则不必显示在选定的列列表中。您将获得符合条件的pol_refs列表
SELECT DISTINCT p.polref FROM t_policies_details p WHERE p.inrtyp NOT IN ('ORD')
INTERSECT
SELECT DISTINCT p.polref FROM t_policies_details p WHERE p.inrtyp NOT IN ('PPC')
INTERSECT
SELECT DISTINCT p.polref FROM t_policies_details p WHERE p.inrtyp NOT IN ('AVCO')
INTERSECT
SELECT DISTINCT p.polref FROM t_policies_details p WHERE p.inrtyp NOT IN ('DSS')
INTERSECT
SELECT DISTINCT p.polref FROM t_policies_details p WHERE p.inrtyp NOT IN ('RVP')
INTERSECT
SELECT DISTINCT p.polref FROM t_policies_details p WHERE p.inrtyp IN ('SP')
INTERSECT
SELECT DISTINCT p.polref FROM t_policies_details p WHERE p.inrtyp IN ('TV')
答案 2 :(得分:0)
请尝试以下查询。这可能对你有帮助
查询:
SELECT DISTINCT p.polref, p.inrtyp
FROM t_policies_details p
WHERE p.inrtyp = ALL ('SP','TV');
答案 3 :(得分:0)
请尝试以下查询。
查询:
SELECT DISTINCT p.polref,p.inrtyp FROM t_policies_details p p.inrtyp in('SP','TV');