2012-03-20 9 views
1

私は複数の従業員を持つテーブルを持っています。それらはempid、datecolumn1、is_validという列を持ちます。日付欄に値のない人を確認します

テーブルに複数のレコードを持つ従業員はほとんどありません。従業員がテーブルに複数のレコードを持っている場合、次の条件のレコードの1つを無効にしたいと考えています。 1.従業員がテーブルに複数のレコードを持っている場合、datecolumn1 (update is_valid to 1)、datecolumn1の値を持つレコードが無効です(update is_valid to 0)。

どうすればよいですか?

答えて

2

ベンが指摘するように、あなたはdatecolumn1がNULLの場合はis_valid列は、あなたがどの方法あなたのに応じて、このCASE声明を調整する必要があり、ことをあなたが修正と仮定すると、0と1の両方に設定したいと述べました決定は正しいです。

UPDATE employees 
    SET is_valid = (CASE WHEN datecolumn1 IS NULL 
         THEN 1 
         ELSE 0 
        END) 
WHERE empid IN (SELECT e.empid 
        FROM employees e 
        GROUP BY emempid 
       HAVING COUNT(*) > 1) 
+0

ああ。私はHAVINGタグについて知らなかった。クール。 –

1

ステージングテーブルを作成し、GROUP BY従業員ID(または一意の識別子が何であれ)を使用して元のテーブルのSELECTを使用して入力します。 2番目のステージングテーブルを作成し、元のテーブルを選択し、グループ化されたテーブルの行と一致するすべての行を除外して入力します。今度は、複数の行を持つ人だけを含むテーブルがあります。元のテーブルから、従業員IDと2番目のステージングテーブルと一致するすべての行で、is_validを0に設定し、datecolumn1も持たない(またはdatecolumn1を持つ可能性もあります - この書き込みに関する質問は少し不明です)、is_valid to 1つは他のものです。それを済ませたら、ステージングテーブルを削除して、必要なものを用意しておく必要があります。

もう1つの複雑なマルチセレクションコールでもこれを行うことができますが、状況が複雑になるとステージングテーブルを使用すると便利です。

関連する問題