1

我有两个表(data2002.dbo.tblCreweds.dbo.tblpms ,其中 tblCrew 用作主表。请注意,tblpms 中的主键都存在于 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

这给我带来了这个结果(这不是我所期望的):

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

我想要(希望@_@)实现的目标如下):

一个。如果表 1 中存在 20 行,表 2 中存在 10 行。我可以在 20 行中得到结果吗(基于 table1)而不是来自 table2(因为 table1 总是比 table2 有更多的数据)。

湾。我还想在我的查询中添加仅显示不同的 CaseNo 并且如果第 3 列不为空。

C。另一个标准是仅当第 3 列中的值介于 109 和 121 之间时(实际值 = 110-120)。

希望你能帮我解决这个问题..提前非常感谢

4

1 回答 1

0

 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

于 2013-03-08T17:49:22.180 回答