根据不同表的2列更新整列

时间:2012-10-16 19:15:43

标签: sql sql-server-2005 datetime

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

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

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

我被困在比较日期范围。

如果您需要任何进一步的信息,请与我们联系

2 个答案:

答案 0 :(得分: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中的所有列。

答案 1 :(得分: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)

现在有效。
如果我需要进行任何更正,请告诉我 由于
豪尔