选择具有特定条件的特定客户端集

时间:2017-10-09 14:35:48

标签: sql sql-server

嗨我有一张桌子,里面有很多可以有两种约会类型的客户。我想要做的是选择两种类型的约会,但是,只有当apptType = 1的日期apptDate在01/01/2016和2016年6月30日之间时。

表格结构

 ID          ClientID           ApptType           ApptDate
 1           12                 1                  01/03/2016
 2           12                 2                  12/05/2016
 3           90                 1                  12/31/2015
 4           90                 2                  05/30/2016

因此每个客户端有2个ApptType,1和2个ApptDate。

我正在尝试选择所有客户端,并且ApptDate在01/01/2016和2016年6月30日之间的ApptType = 1。对于满足该条件的所有客户,我试图看到两个appTtypes

我尝试过类似的东西,但它只显示了apptType = 1

Select * from tblA where apptType=1 and apptDate between 01/01/2016 and 06/30/2016

期望的最终结果:

 ID          ClientID           ApptType           ApptDate
 1           12                 1                  01/03/2016
 2           12                 2                  12/05/2016

我希望结果会显示ApptType = 1和ApptType = 2的所有客户日期为01/01/2016 - 06/30/2016 for AppTType = 1

2 个答案:

答案 0 :(得分:2)

根据Sean Lange的建议,你可以使用exists

来做到这一点
Select * from tblA T1 
 where exists (
 select 1 from tblA T2  where T2.apptType=1 and T2.apptDate between '01/01/2016' and '06/30/2016' AND T1.ClientId=T2.ClientId)

使用JOIN的其他方式在

之下
select * from TblA t1 
inner Join tblA t2
on T1.ClientId=T2.ClientId
AND T2.apptType=1 and T2.apptDate between '01/01/2016' and '06/30/2016'

see working demo

答案 1 :(得分:1)

这是应该非常接近的事情。

select ID
    , ClientID
    , ApptType
    , ApptDate
from YourTable yt
where exists
(
    select *
    from YourTable yt2
    where yt2.ClientID = yt.ClientID
        AND yt.ApptType = 1
        AND yt.ApptDate >= '20160101'
        AND yt.ApptDate <= '20160630'
)