1

申し訳ありませんが、控えめに言っても、タイトルはそれほど素晴らしいものではありません。

CUSTOMER テーブルには、電話番号用に P1、P2、P3、P4 の 4 つの列があります。また、電話番号がまったくないかどうかを示す列も 1 つあります。値が 1 または 0 の NOPHONE (ばかげているように聞こえるかもしれませんが、長い話なので、そのとおりです)。

電話番号を持っていないときはいつでも、値は 1 です (それにも理由があります)。

今、私がしなければならないことは、0 を持つすべての電話番号を更新し、値を NULL に変更することです... NOPHONE=1 を持つレコードを除いて (そして P1=P2=P3=P4 を持つことになります) =0)、そのまま (つまり、0) のままにする必要があります。

1つのSQLステートメントでそれを行うにはどうすればよいですか?

ありがとう!

4

2 に答える 2

3

CASE条件付きで値を設定するには、ステートメントを使用します。現在の値を保持したい場合は、それ自体に設定してください。このWHERE句は、少なくとも 1 つの列を変更する必要があることを確認します。

UPDATE CUSTOMER
SET
  P1 = CASE WHEN P1 = 0 THEN NULL ELSE P1 END,
  P2 = CASE WHEN P2 = 0 THEN NULL ELSE P2 END,
  P3 = CASE WHEN P3 = 0 THEN NULL ELSE P3 END,
  P4 = CASE WHEN P4 = 0 THEN NULL ELSE P4 END
WHERE NOPHONE = 0
  AND (P1 = 0 OR P2 = 0 OR P3 = 0 OR P4 = 0)

あなたのNOPHONE論理は逆のようです。直感的には、利用可能な電話番号がないことを示していると思いNOPHONE = 1ますが、あなたの質問はまったく逆です。

于 2012-08-01T13:25:32.673 に答える
2
UPDATE Customer
SET P1 = NULLIF(P1, 0), P2 = NULLIF(P2, 0), P3 = NULLIF(P3, 0), P4 = NULLIF(P4, 0)
WHERE NOPHONE = 0
于 2012-08-01T13:52:22.683 に答える