2

以前の挿入日が存在する場合にのみ、テーブル内のInsertDateすべての個別AccIdAccNameHolder組み合わせのを更新しようとしています。#tmpResults

テーブルスキーマは次のようになります。

#tmpResults

Trans | AccId | AccountNameHolder | EarlyDate | CardType 

PositionCollection

Id | AccId | InsertDate | BtchId

CardErrors

AccId | AccNameHolder | BtchId | TransId

これが私がこれまでに試したことです:

UPDATE  RES  
SET     EarlyDate = pc.InsertDate   
FROM  ( dbo.PositionCollection pc    
        LEFT JOIN dbo.CardErrors ce ON ce.BtchId = pc.BtchId AND pc.id =     ce.Transid  )    
    INNER JOIN #tmpResults RES   
ON      RES.AccId = pc.AccId    
AND     RES.AccNameHolder = ce.AccNameHolder    
WHERE   RES.EarlyDate = (SELECT MIN(InsertDate) FROM PostionCollection)    
AND     RES.AccId = pc.AccId    
AND     RES.AccNameHolder = ce.AccNameHolder
4

2 に答える 2

0

InsertDate が null の場合の一般的な解決策をいくつか紹介します。DateDiff でそれらを使用して、条件を以前、後で、またはその他のものに変更できます。

OldInstDate <= COALESCE(NewInstDate, OldInstDate)

条件付き更新はselectステートメント内で実現できるため...

SET InsertDate = COALESCE(InsertDate, NewInsertDate) WHERE...

また

SET InsertDate = CASE WHEN InsertDate IS NULL THEN NewInsertDate 
                      ELSE InsertDate END

また

WHERE ...
AND InsertDate IS NULL

サブクエリに関する本当に明確なヘルプについては http://allenbrowne.com/subquery-01.html これはおそらく私が見た中で最高のものであり、トラブルシューティングについてはhttp://allenbrowne.com/subquery-02.htmlだと思います

于 2012-11-26T16:24:54.080 に答える
0

UPDATE ステートメントで派生テーブルを使用する

UPDATE x
SET x.EarlyDate = x.InsertDate  
FROM  ( 
       SELECT RES.EarlyDate, pc.InsertDate
       FROM dbo.PositionCollection pc
         LEFT JOIN dbo.CardErrors ce ON ce.BtchId = pc.BtchId AND pc.id = ce.Transid
         INNER JOIN #tmpResults RES ON RES.AccId = pc.AccId
           AND RES.AccNameHolder = ce.AccNameHolder
       WHERE RES.EarlyDate = (SELECT MIN(InsertDate) FROM PostionCollection) AND RES.AccId = pc.AccId
         AND RES.AccNameHolder = ce.AccNameHolder
       ) x

更新 27.11.2012

UPDATE x
SET x.EarlyDate = x.InsertDate
FROM  (
       SELECT RES.EarlyDate, m.InsertDate
       FROM dbo.PositionCollection pc
         LEFT JOIN dbo.CardErrors ce ON ce.BtchId = pc.BtchId AND pc.id = ce.Transid
         INNER JOIN #tmpResults RES ON RES.AccId = pc.AccId AND RES.AccNameHolder = ce.AccNameHolder
         INNER JOIN (SELECT MIN(InsertDate) AS InsertDate FROM PostionCollection) m
           ON RES.EarlyDate = m.InsertDate 
       ) x
于 2012-11-26T16:38:23.763 に答える