我有一个表格,其中包含医疗号码和程序的列。有很多行,医学数字可以用很多程序重复;例如:
Mid_no procedure
--------------------
100. 20
100. 30
200. 30
我想选择具有过程30并且没有过程20的所有mid_no
。在上面的示例中,所需的结果将是:
Mid_no. Procedure
---------------------
200. 30
答案 0 :(得分:3)
SELECT t.mid_no,
t.procedure
FROM TABLE t
WHERE NOT EXISTS
(SELECT 1 FROM TABLE t1 WHERE t1.mid_no = t.mid_no AND t1.procedure = 20
)
AND t.procedure = 30;
答案 1 :(得分:1)
select mid_no from table where procedure = 30
intersect
select mid_no from table where procedure != 20
答案 2 :(得分:0)
只需对表格进行一次扫描,即可使用:
select distinct Mid_no
from (
select count(case when procedure=20 then 1 end ) over ( partition by Mid_no) as has20,
count(case when procedure=30 then 1 end ) over ( partition by Mid_no) as has30,
Mid_no
from yourTable
)
where has20 = 0
and has30 != 0
内部查询针对每个20
计算两个不同值中30
和Mid_no
的出现次数;外部人员只选择唯一没有出现20
且至少有一次出现30
的记录。