2016-10-24 6 views
0

私はこれを説明する方法はわかりませんが、まだ私はベストを尽くすので、この1つを私に付いてください。 TY複数の基準の更新

私は2つのテーブルを持っています。

enter image description here

と私は3つの基準を持っているし、彼らは

Reviewed Partially Selected Fully Selected

ある私はVB.Netでプログラムそのアップデートに私は、私は常にあることを含めて、項目を選択するには、表Items毎回を持っていますそれをタグ付けしてAdded = yesを更新します。

たとえば、Peanutを選択すると、出力はこのようになります。

enter image description here

は今、私はあなたが Trans Noを見た、その列 addedも今ここ

私の質問があり、テーブルItemsに更新する項目を選択し続ける場合は?両方のテーブルの両方の列です。私の質問added列に基づいてテーブルPRをどのように更新できますか?ここで

同じTransNoを持つすべての項目1.If基準

が選択されている、ステータスは、すべての項目が選択されたが、それでもyesがであるされているPR

ない2.Ifは表でFully SelectedですAdded次いで、カラムを、表PRにおける状態が部分的に存在3.IfはAdded表に/いいえyes選択されていないアイテムを

が選択されていない次いでPRにおけるステータスあります0

4.項目が1(one)の場合はどうすればよいですか?どのように私は3つの基準を適用することができます

どのように私はそれを作ることができますか?

将来の助けをTYSM

答えて

0

私はPRテーブルを更新するためにitemsテーブルの上にtriggersを使用します。レコードがitemsテーブルに挿入された後にフィールドをyesに設定できる場合は、after updateafter deleteトリガーのみを使用します。そうでない場合はafter insertも使用します。

トリガーの1つを表示しますが、この例に基づいて他のトリガーを作成できます。私はまた、論理がほぼ同じであることを考えれば、トリガによって呼び出されるストアドプロシージャにロジックを移動することも検討します。

以下のコードは、同じTransNoを持つitemsテーブルのレコード数をカウントし、Addedがyesに設定されている同じレコードをカウントし、これらの数値を2つの変数に割り当てます( `select ... into .. 。ステートメント)。

次に、ifステートメントでは、ステータステキストは、説明したロジックに基づいて決定されます。

最後に、このレコードがすでに存在すると仮定して、PRテーブルのステータスフィールドが更新されます。 PRテーブルのこのレコードが存在しない場合は、コードを拡張する必要があります。

delimiter // 
create trigger items_added_after_update after update on items 
for each row 
begin 
    declare all_count int; 
    declare yes_count int; 
    declare status_text varchar(20); 

    select count(TransNo), count(if(added='Yes',1,null)) into all_count, yes_count 
    from items where TransNo=NEW.TransNo; 
    if all_count=yes_count then set status_text='Fully Selected'; 
    elseif yes_count=0 then set status_text='Reviewed'; 
    else set status_text='Partially Selected'; 
    end if; 

    update PR set PR.status=status_text where PR.TransNo=NEW.TransNo; 
end // 
delimiter ; 
+0

私は皆さんが私を愛していると言うことができます<3 TYSMのプロのような仕事をしています、これは初めてこのコードに遭遇します。 –

関連する問題