Sql server 2008 需要sql server 2008中的查询帮助吗
您好,我对sql server有疑问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
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