caseステートメントを使用して1つのテーブルで複数の行を更新したいとします。 これは、更新ステートメントです:caseステートメントを使用して複数の行を更新する1行のみを更新する
UPDATE UDSDiagnosisGroups
SET UDSDiagnosisCategoryID =
CASE WHEN LineDisplay IN ('1-2', '3', '4', '4a', '4b') THEN (SELECT UDSDiagnosisCategoryID
FROM UDSDiagnosisCategories
WHERE UDSDiagnosisCategory = 'Selected Infectious and Parasitic Diseases')
WHEN LineDisplay IN ('5', '6') THEN (SELECT UDSDiagnosisCategoryID
FROM UDSDiagnosisCategories
WHERE UDSDiagnosisCategory = 'Selected Diseases of the Respiratory System')
WHEN LineDisplay IN ('7', '8', '9', '10', '11', '12', '13', '14', '14a') THEN (SELECT UDSDiagnosisCategoryID
FROM UDSDiagnosisCategories
WHERE UDSDiagnosisCategory = 'Selected Other Medical Conditions')
WHEN LineDisplay IN ('15', '16', '17') THEN (SELECT UDSDiagnosisCategoryID
FROM UDSDiagnosisCategories
WHERE UDSDiagnosisCategory = ' Selected Childhood Conditions (limited to ages 0 through 17)')
WHEN LineDisplay IN ('18', '19', '19a', '20a', '20b', '20c', '20d') THEN (SELECT UDSDiagnosisCategoryID
FROM UDSDiagnosisCategories
WHERE UDSDiagnosisCategory = 'Selected Mental Health and Substance Abuse Conditions')
END
FROM UDSDiagnosisGroups
WHERE UDSDiagnosisCategoryID IS NULL
問題のみ1行がUDSDiagnosisGroups
テーブルで更新されていることです。 更新される行はの値が1-2
のものです。 その他の値はすべてNULL
のままです。
どこが間違っていますか?私が見つけた例に従っていますが、テーブルのすべての行ではなく、1行だけが更新されています。私はこのような何かにあなたのコードを変更することをお勧めしたい
私に似ています。なぜあなたがマッチを得ていないのかを知るには、case文I.Eを選択します。 UPDATE UDSDiagnosisGroups SET UDSDiagnosisCategoryID =を削除し、SELECTで置き換えます。その後、ELSE LineDisplayを最後に置くと、一致していないときのLineDisplayの値が表示されます。 –
OK。私があなたの提案をすると、データ型に関するエラーが発生します。 'LineDisplay'はvarchar(5)であり、IDはintです。しかし、私はIDを 'LineDisplay'値に基づいて設定する必要があります。したがって、 'LineDisplay'がこの値のリストであるとき、selectステートメントに基づいてIDを選択します。 –
私はそれを理解しました。 'LineDisplay'文字列は、文字列の先頭に空のvarcharを持っていました。これらの文字をトリミングすると、更新が機能します。 @Robert Bainの提案に感謝します。 –