Я хотел бы обновить один столбец, но несколько строк в одной таблице, используя оператор case. это обновление заявление:Обновление нескольких строк с использованием только обновления 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
Проблема заключается в том, что только одна строка обновляется в UDSDiagnosisGroups
таблице. Обновленная строка - это номер LineDisplay
1-2
. Все остальные значения остаются NULL
.
Куда я иду не так? Мне кажется, что я следую приведенным ниже примерам, но обновляется только одна строка, а не все строки в таблице.
кажется правильным для меня. Чтобы понять, почему вы не получаете соответствия, просто выберите оператор case, I.E. удалить UPDATE UDSDiagnosisGroups УСТАНОВИТЬ UDSDiagnosisCategoryID = и заменить его на SELECT. Затем поставьте ELSE LineDisplay в конце, и вы увидите, что такое значение LineDisplay, когда вы не получаете соответствия. –
ОК. Когда я делаю то, что вы предлагаете, я получаю сообщение об ошибке в отношении типов данных. «LineDisplay» - это varchar (5), а идентификатор - int. Но мне нужно установить идентификатор в значение 'LineDisplay'. Итак, когда 'LineDisplay' - это список значений, выберите ID на основе оператора select. –
Я понял. Строка 'LineDisplay' имела пустой varchar в начале строки. Когда я обрезаю эти символы, обновление работает. Спасибо за предложение @Robert Bain. –