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

私が直面している問題は、senttime が他のテーブルの有効な fromtime である場合、senttime が > effective fromtime である同じ ClinicalID の他の組織 ID を表示することです。

日付範囲の比較に行き詰まっています。

さらに情報が必要な場合はお知らせください

4

2 に答える 2

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)

これは現在のところ機能します。
修正が必要な場合はお知らせください。
ありがとう
vihar

于 2012-10-17T22:47:57.880 に答える
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 CTEand に置き換える必要があります。これにより、NewOrgID ごとに NULL が表示され、OrgID は各行に入力される値が表示されます。本当に確実にしたい場合は、FirstTable と SecondTable のすべての列が含まれるように CTE を変更できます。

于 2012-10-16T20:48:05.323 に答える