Sql 如何使用条件减去两个日期(如果另一个表中不存在数据,请使用今天的日期,如果存在,请使用其中的日期)?
我有两个表(data2002.dbo.tblCrew和eds.dbo.tblpms),其中tblCrew用作主表。请注意,tblpms中的primarykey都存在于tblCrew(main)中。我想看看tblCrew中的数据是否存在于tblpms中,如果确实存在,我需要得到tblCrew中某个日期与tblpms中另一个日期的差值。但是如果它不存在,我需要tblCrew的日期和今天的日期的差异 我被我的问题困住了:Sql 如何使用条件减去两个日期(如果另一个表中不存在数据,请使用今天的日期,如果存在,请使用其中的日期)?,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有两个表(data2002.dbo.tblCrew和eds.dbo.tblpms),其中tblCrew用作主表。请注意,tblpms中的primarykey都存在于tblCrew(main)中。我想看看tblCrew中的数据是否存在于tblpms中,如果确实存在,我需要得到tblCrew中某个日期与tblpms中另一个日期的差值。但是如果它不存在,我需要tblCrew的日期和今天的日期的差异 我被我的问题困住了: SELECT t1.CaseNo, t1.LastName + ', ' + t
SELECT t1.CaseNo, t1.LastName + ', ' + t1.FirstName as fname
, case
when (t2.med_stat <> 'Fit To Work' and t2.med_stat <> 'Deceased'
and t2.med_stat <> 'Reached Maximum Medical Cure'
and t2.med_stat <> 'Stop Treatment')
then datediff(day,cast(t1.DatePIConsult as datetime), getdate())
else
datediff(day,cast(t1.DatePIConsult as datetime),cast(t2.med_stateff as datetime)) end as
TreatmentDays
from data2002.dbo.tblCrew as t1
join eds.dbo.tblpms as t2
on t1.CaseNo COLLATE DATABASE_DEFAULT = t2.CaseNo COLLATE DATABASE_DEFAULT
我希望更像这个(样本):
我希望实现的目标如下:
a。如果表1中有20行,表2中有10行。我可以将结果分成20行(基于表1)而不是表2(因为表1总是比表2有更多的数据)
b。我还想在我的查询中添加只显示不同的CaseNo和if第三列不为null
c。另一个标准是第3列中的值仅在109和121之间(实际值=110-120)
希望你能帮我做这件事。。提前非常感谢选择t1.CaseNo、t1.LastName+'、'+t1.FirstName作为fname
案例
当t2.CaseNo为空时
然后是datediff(day,cast(t1.DatePIConsult作为datetime),getdate()
当t2.med_状态不在(‘适合工作’)时,
"死者",,
“达到最大医疗治愈率”,
‘停止治疗’)
然后是datediff(day,cast(t1.DatePIConsult作为datetime),getdate()
其他的
datediff(day,cast(t1.DatePIConsult作为datetime),cast(t2.med_stateff作为datetime))
以治疗日结束
从data2002.dbo.tblCrew作为t1
左连接eds.dbo.tblpms作为t2
在t1.CaseNo COLLATE DATABASE\u DEFAULT=t2.CaseNo COLLATE DATABASE\u DEFAULT
上,主表中的t1.DatePIConsult
是否有一些列为空?也可以尝试LEFT JOIN
而不是JOIN
。是的,没错。。虽然不应该这样,但用户一直在这样做=P所以,我必须考虑……可能的复制品,不,它不是,虽然它也是我的帖子。这是另一种情况。。谢谢碰巧两个日期的差异仍然包括在内。@E-rGabrielDoronila:你试过左加入吗?
CaseNo Name Days
AM06-009-CRW VILLARINO, RICHARD
BLB13-014-CRW ARQUISOLA, REDEN
JPI12-028-CRW OBENQUE, JOSE
JPI12-037-CRW TARRO, ANGELO
JPI12-039-CRW DELA CRUZ, FELICIANO 121
NOE12-205-CRW CLAVIO, RAYMUND
NOE12-205-CRW CLAVIO, RAYMUND
CaseNo Name Days
BM07-029-CRW ASASPOK, RICH 119
CLC14-014-CRW QDASF, READS 115
SELECT t1.CaseNo, t1.LastName + ', ' + t1.FirstName as fname
, case
when t2.CaseNo IS NULL
THEN datediff(day,cast(t1.DatePIConsult as datetime), getdate())
when t2.med_stat NOT IN ('Fit To Work',
'Deceased',
'Reached Maximum Medical Cure',
'Stop Treatment')
then datediff(day,cast(t1.DatePIConsult as datetime), getdate())
else
datediff(day,cast(t1.DatePIConsult as datetime),cast(t2.med_stateff as datetime))
end as TreatmentDays
from data2002.dbo.tblCrew as t1
left join eds.dbo.tblpms as t2
on t1.CaseNo COLLATE DATABASE_DEFAULT = t2.CaseNo COLLATE DATABASE_DEFAULT