2012-02-22 8 views
0
UPDATE MyTable SET Status = (SELECT CASE WHEN COUNT(*) > 0 
          THEN 0   
          ELSE 1 
          END 
        FROM MyTable 
        WHERE Status = 1) 
WHERE RowNumber BETWEEN 1 AND 5 
ORDER BY RowNumber 

テーブルと同じですそれ以外の場合、RowNumber 1のみが0に更新され、RowNumber 2〜5は0に更新されます。更新テーブルには、私がやりたいことがある場合、私は、5にRowNumber関数1を更新している間= 1 状況でたMyTableに一つだけの行があるでしょうで、サブクエリで

ただし、前述のクエリはStatus = 1の既存レコードではありません。ワーキング。サブクエリはクエリ全体の前に実行され、サブクエリの結果は静的であるため、別のクエリが更新された後に新しい結果が1つのレコードとして与えられないことを意味します。

このクエリでは、ステータス= 1のテーブルに行がない場合、すべてのRowNumber 1〜5がステータス= 1で更新されます。これは私が期待しているものではありません。

答えて

0

あなたが何をしっかりしているか分かりませんが、元のケースのelse節にネストされたcase文を追加する必要があるようです。以下のコードを参照してください:

UPDATE MyTable SET Status = (SELECT CASE WHEN COUNT(*) > 0 
         THEN 0   
         ELSE CASE WHEN RowNumber = 1 THEN 1 
          ELSE 0 END 
         END 
       FROM MyTable 
       WHERE Status = 1) 
WHERE RowNumber BETWEEN 1 AND 5 
ORDER BY RowNumber 
+0

私がしたいことは、テーブルにステータス= 1の行が1つしかないことです。 status = NULLの新しい行が挿入されました。後でステータス= 0または1で更新されます。ステータス= 1の既存の行がある場合は、明らかに新しい更新は0に設定されます。いいえがある場合は、更新行の中で、それらの1つだけが1に設定されます。これは理解できますか? –

関連する問題