根据多个条件从表中选择数据

时间:2018-02-06 20:34:04

标签: sql sql-server inner-join

我有一张包含大量数据的表格。这是我的表格的样子:

TBLA

RcdID   ClientID      ApptType      ApptDate 

1       7                  1         01/01/2016
2       7                  2         07/02/2016
3       8                  1         02/16/2016
4       8                  2         09/30/2016
5       9                  1         03/01/2016
6       9                  2         10/03/2016

以下是我尝试过滤的字段。如您所见,每个客户端可以有不同的ApptType 1或2.通常AppTType = 2是在AppTType = 1后6-9个月。

我希望找到的是AppType = 2的所有客户,只有AppType = 1发生在2016年1月1日至2016年2月15日之间

我写了这个查询,但我不确定我是否正确地做了。我有成千上万的记录,希望得到正确的结果。

Select * from tblA innerJoin TblA x on tblA.ClientId = x.ClientId and 
  x.ApptType=1 and 
    x.ApptDate >='01/01/2016' and 
      x.ApptDate < ='02/15/2016' 
        WHERE tblA.AppType=2

希望得到这些结果:

   RcdID          ClientID           ApptType         ApptDate 
   2              7                  2                07/02/2016    
   4              8                  2                09/30/2016

在我的结果集中,我只希望看到这两个客户,因为他们的ApptType = 1日期介于&lt; 01/01/2016和&#39; 02/15 / 2016&#39;而ClientID = 9在&#39; 02/15/2016&#39;

之后的AppType = 1日期

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

Select * from tblA innerJoin TblA x on tblA.ClientId = x.ClientId 
    WHERE tblA.AppType=2
  and 
 x.ApptType=1 and 
(x.ApptDate >='01/01/2016' and 
  x.ApptDate < ='02/15/2016') 

答案 1 :(得分:1)

你可以尝试这样的事情。

SELECT * 
FROM TblA a 
 WHERE a.ApptType = 2 
 AND a.ClientID IN
 (SELECT ClientID
  FROM TblA
  WHERE ClientID = a.ClientID
   AND ApptType = 1
   AND ApptDate >= cast('01/01/2016' AS DATE)
        AND ApptDate < cast('02/15/2016' AS DATE) )