Sql 如何使用条件减去两个日期(如果另一个表中不存在数据,请使用今天的日期,如果存在,请使用其中的日期)?

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

我有两个表(data2002.dbo.tblCrew和eds.dbo.tblpms),其中tblCrew用作主表。请注意,tblpms中的primarykey都存在于tblCrew(main)中。我想看看tblCrew中的数据是否存在于tblpms中,如果确实存在,我需要得到tblCrew中某个日期与tblpms中另一个日期的差值。但是如果它不存在,我需要tblCrew的日期和今天的日期的差异

我被我的问题困住了:

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