0

私はウェブを検索しましたが、解決策を思いつくことができませんでした。助けていただければ幸いです。

とりわけ、これらの値を含むテーブルがあります。

Item Charge No  Item Ledger Entry No    IsReceivedInFull
--------------------------------------------------------
Ocean Freight   1525593
Factory Cost    1525593
Overhead        1525593
Factory Cost    1525593
Fee             1525593
Duty            1525593
Landing Freight 1525593

結果をループして、Item Ledger Entry No ごとに、テーブルにこれら 5 つのコンポーネントがあることを確認しようとしています。「海上輸送費」、「工場費」、「手数料」、「関税」、および「陸揚げ輸送費」。個々のアイテム元帳エントリ No に少なくとも 5 つの行があり、上記の Item Charge No ごとに 1 行ずつある場合、「IsReceivedInFull」を「Yes」に設定したいと思います。

私はABAPプログラミングのバックグラウンドを持っており、これはいくつかのLOOPステートメントで簡単に実行できることを知っていますが、T-SQLは初めてで、この単純な問題を解決するのに苦労しました. 助けてください。

4

1 に答える 1

0

これを試すことができます:

UPDATE mytable tgt
SET    tgt.isreceivedinfull="Yes"
WHERE  tgt.isreceivedinfull is null and
       exists(SELECT src.item_ledger_Entry_no, count(*) 
              FROM   mytable src
              WHERE  src.item_ledger_entry_no = tgt.item_ledger_entry_no  
                     and src.item_charge_no in ("Ocean Freight", 
                                                "Factory Cost", 
                                                "Fee", 
                                                "Duty", 
                                                "Landing Freight")
                    group by src.item_ledger_entry_no
                    having count(*) >= 5)

DBのタイプに応じて文字列リテラル( "または ')を調整する必要がある場合があり、フィールド名とテーブル名は例からは利用できないためです。

それはうまくいくはずです。

説明: 副選択の結果が null 以外のレコード セット (複数の行を意味する) である場合、exists 条件は true になります。sub-select の where 句で tgt.item_ledger_entry_no を使用すると、この特定のアイテムに探している 5 つのエントリがある場合にのみ、null 以外が取得されます。これを言うと、同じIDを持つすべての行に「はい」が設定されますが、リストにないリテラルの1つ(「オーバーヘッド」という名前)も設定されます。また、行が重複しているため ("Factory Cost" という名前が 2 回あります)、所有条件は以上に設定されます。

それが役立つことを願っています

ダニエル

于 2012-10-03T15:16:19.520 に答える