如何解决带嵌套子句的SQL语句查询
出于演示目的,我修改了表名和字段并简化了SQL问题:
我们有一个名为A
的表,只有两列:
Name ServiceReceived
=========================
Mr A Medical
Mr A Dental
Mr A HealthCare
Mr A Special1
Mr B Dental
Mr B HealthCare
Mr C Medical
Mr C Dental
Mr C HealthCare
Mr C Special
Mr C Special2
我需要所有进行过医疗或牙科手术的人的名单。
并且ALSO还收到了Special1和Special2中的一两个
我尝试过
where ServiceReceived in ('medical','dental')
and ServiceReceived in ('Special1','Special2')
但这不起作用。
======================================
预期结果:(您看到MrB不在,因为他没有Special1或Special2
Name ServiceReceived
=========================
Mr A Medical
Mr A Dental
Mr A HealthCare
Mr A Special1
Mr C Medical
Mr C Dental
Mr C HealthCare
Mr C Special
Mr C Special2
解决方法
您可以使用聚合和having
子句:
select t.*
from t
group by Name
having sum(case when ServiceRecived in ('Medical','Dental') then 1 else 0 end) > 0 and
sum(case when ServiceRecived in ('Special1','Special2') then 1 else 0 end) between 1 and 2;
如果要查看所有详细信息,可以使用join
,in
或exists
:
select t.*
from t
where t.name in (select Name
from t
group by Name
having sum(case when ServiceRecived in ('Medical','Dental') then 1 else 0 end) > 0 and
sum(case when ServiceRecived in ('Special1','Special2') then 1 else 0 end) between 1 and 2
);
,
Select Name
from
(
Select Name,Sum(Case when ServiceRequested = 'Medical' then 1 else 0 end) as Medical,Sum(Case when ServiceRequested = 'Dental' then 1 else 0 end) as Dental,Sum(Case when ServiceRequested IN ('Special1','Special2') then 1 else 0 end) as Specials
from [dbo].[Services]
Group by Name
)s
Where ( Medical >= 1 or Dental >= 1 ) AND Specials >= 1
,
以下解决方案与SQL Server INTERSECT表运算符一起使用。
SELECT NAME
FROM T
WHERE ServiceReceived IN ('medical','dental')
INTERSECT
SELECT NAME
FROM T WHERE
ServiceReceived IN ('Special1','Special2')
,
这应该有效。
SELECT NAME
FROM A
WHERE
NAME IN (SELECT NAME FROM A AS A2 WHERE A2.ServiceReceived IN ('medical','dental'))
AND NAME IN (SELECT NAME FROM A AS A2 WHERE A2.ServiceReceived IN ('Special1','Special2'))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。