0

我在表中添加了一个新列。该表的列是:

Identifier(unique identity but not joinable to the other table)
ClinicalID(int)
senttime(datetime)
orgID(int-new column)

我需要根据发送时间从不同的表中更新新列。我应该检查发送时间的日期范围并相应地更新 orgID。另一个表的列:

ClinicalIDentifier
org ID(int) 
old orgID(int)
effectivefromtime
effectivethrutime

我面临的问题是,如果发送时间 > 另一个表的有效起始时间,它会显示相同临床 ID 的其他组织 ID,其中发送时间 > 有效起始时间。

我一直在比较日期范围。

如果您需要任何进一步的信息,请告诉我

4

2 回答 2

0
WITH CTE AS
(
SELECT
    FirstTable.OrgID NewOrgID,
    SecondTable.OrgID
FROM
    FirstTable
    LEFT JOIN SecondTable 
        ON FirstTable.ClinicalID = SecondTable.ClinicalIndetifier 
        AND FirstTable.SentTime > SecondTable.EffectiveFromTime 
        AND FirstTable.SentTime < SecondTable.EffectiveThruTime
)
UPDATE CTE
    SET NewOrgID = OrgID

我无法从您的问题中看出表名是什么或它们是如何连接的,但我认为应该这样做。要测试 CTE,您应该替换上面的整个UPDATE语句,SELECT * FROM CTE这将显示每个 NewOrgID 的 NULL,并且 OrgID 将显示将在每一行中填充的值。如果您想确定可以修改 CTE,使其包含 FirstTable 和 SecondTable 中的所有列。

于 2012-10-16T20:48:05.323 回答
0

知道了!!

select  
case when (effectivethrutime is null and senttime >= effectivefromtime) then orgid  
when (effectivethrutime is not null and senttime >= effectivefromtime) then orgID  
when (effectivethrutime is not null and senttime between effectivethrutime and   effectivefromtime) then orgid  
end as orgid  
from ac  
left join op  
on ac.clinicalidentifier=op.clinicalidentifier  
where ac.senttime>op.effectivefromtime   
and ac.senttime<=isnull(op.effectivethrutime,ac.senttime)

到目前为止,这有效。
让我知道是否需要更正。
谢谢维哈尔
_

于 2012-10-17T22:47:57.880 回答