同じ番号を持つグループの中でステータスが混在している場合だけ値を更新するSQL文を作成したい

投稿者: Anonymous

1個のテーブル(A_TBL)の中で、「A番号」、「B番号」、「C番号」が共に同じレコードが存在することがあり、それらの中で「ステータス1」が”0”と”1”が混在している場合があります。

その条件に合致する全てのレコードに対して、「ステータス1」を”2″、「ステータス2」を”0”にするSQL文を作りたいのですが、上手くいきません。

どなたかご教示をお願いできますでしょうか。

(例)「A_TBL」
項目名:  A番号 , B番号, C番号 , ステータス1 , ステータス2


      "A001"  "B001"   "C01"        0            1
      "A001"  "B001"   "C01"        0            1
      "A001"  "B001"   "C01"        0            1

      "A002"  "B001"   "C01"        1            1
      "A002"  "B001"   "C01"        1            1

      "A003"  "B002"   "C01"        1            1
      "A003"  "B002"   "C01"        1            1
      "A003"  "B002"   "C01"        0            1

      "A004"  "B002"   "C02"        1            1
      "A004"  "B002"   "C02"        1            1
      "A004"  "B002"   "C02"        1            1

      "A005"  "B002"   "C01"        1            1
      "A005"  "B002"   "C01"        0            1
      "A005"  "B002"   "C01"        1            1

((例)の表記に誤りがあり、修正しました。sayuri様、指摘ありがとうございました。)

上記の内、「A003/B002/C01」と「A005/B002/C01」の組合せグループが変更対象となります。
この3レコードに対して、ステータス1を”2″に、ステータス2を”0″に変更したいのですが。。

RDBMSは「SQL Server 2016」です。
どうぞよろしくお願いいたします。

解決

「A003/B002/C01」と「A005/B002/C01」の組合せグループが対象であれば、「A番号」、「B番号」、「C番号」が同一かつ「ステータス1」が異なるレコードが存在するものをUPDATEすることで対応可能です。(SQL Server 2017で確認)

update T
set    STATUS1 = 2,
       STATUS2 = 0
from   A_TBL T,
       A_TBL D
where  T.A_ID = D.A_ID
and    T.B_ID = D.B_ID
and    T.C_ID = D.C_ID
and    T.STATUS1 <> D.STATUS1;
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *