Sql server 2008 需要sql server 2008中的查询帮助吗

Sql server 2008 需要sql server 2008中的查询帮助吗,sql-server-2008,Sql Server 2008,您好,我对sql server有疑问 Table : patient patientno | refdoctor| loccode | status | sdate 100 | 31 |10 | 1 | 2012-05-03 100 | 32 |10 | 1 |1997-02-04 100 | 36 |10 | 1 |2014-09-16 1

您好,我对sql server有疑问

Table : patient
patientno   | refdoctor| loccode | status | sdate
100         |  31      |10       | 1      | 2012-05-03 
100         | 32       |10       | 1      |1997-02-04
100         | 36       |10       | 1      |2014-09-16
100         |35        |10       | 1      |2013-05-03
100         | 50       |10       | 1      | 1988-05-08
100         | 20       |10       | 2      |2015-02-05

Table : targetpatient

patientno   | refdoctor| loccode | status | sdate
100         | 21       | 10      | 2      | 2004-05-18
100         | 23       | 10      | 2      |2005-07-25
100         | 24       | 10      | 2      | 2006-06-22
100         | 26       | 10      | 2      |2012-05-14
100         | 28       |10       | 2      |2013-05-03
100         |29        |10       | 2      | 2014-09-26
100         | 33       | 10      | 2      | 2012-10-22
100         | 39       | 10      | 2      |2002-12-13
100         |41        | 10      | 2      |2012-05-13
这里我想要输出病人表的相关状态

statusvalue=5的sdate小于或等于checkvalue=2的sdate,并且 两个日期之间的差异应小于30天,然后进行计数 如果该条件未下降,则计数必须返回零(0)

选择o.patientno、o.loccode、o.status、o.sDate、count(*)作为cnt
从患者o在o.patientno=t.patientno和o.loccode=t.loccode和o.status in('1')和t.status in('2')上加入目标患者t,以及

o、 sDate如果要在联接表中包含没有任何匹配项的记录,则需要使用
左联接
,并对联接表中的列执行
计数
,如下所示:

select o.patientno,o.loccode,o.status,o.sDate, count(t.sdate) as cnt
from patient o 
left join targetpatient t on o.patientno = t.patientno 
                         and o.loccode = t.loccode 
                         and o.status in('1') 
                         and t.status in('2') 
                         and o.sDate <= t.sdate
                         and datediff(dd,o.sdate,t.sdate) <= 30
group by o.patientno,o.loccode,o.status,o.sDate
选择o.patientno、o.loccode、o.status、o.sDate、count(t.sDate)作为cnt
病人o
左连接o.patientno=t.patientno上的目标患者t
和o.loccode=t.loccode
和o.在('1'中的状态)
和t.在('2'中的状态)

还有o.sDate@user5509775恐怕我不明白。我提供的查询给出了您用作示例的结果(在编辑问题之前)。这不对吗?
select o.patientno,o.loccode,o.status,o.sDate, count(t.sdate) as cnt
from patient o 
left join targetpatient t on o.patientno = t.patientno 
                         and o.loccode = t.loccode 
                         and o.status in('1') 
                         and t.status in('2') 
                         and o.sDate <= t.sdate
                         and datediff(dd,o.sdate,t.sdate) <= 30
group by o.patientno,o.loccode,o.status,o.sDate