2016-11-27 6 views
1

Я хотел бы обновить один столбец, но несколько строк в одной таблице, используя оператор 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 таблице. Обновленная строка - это номер LineDisplay1-2. Все остальные значения остаются NULL.

Куда я иду не так? Мне кажется, что я следую приведенным ниже примерам, но обновляется только одна строка, а не все строки в таблице.

+0

кажется правильным для меня. Чтобы понять, почему вы не получаете соответствия, просто выберите оператор case, I.E. удалить UPDATE UDSDiagnosisGroups УСТАНОВИТЬ UDSDiagnosisCategoryID = и заменить его на SELECT. Затем поставьте ELSE LineDisplay в конце, и вы увидите, что такое значение LineDisplay, когда вы не получаете соответствия. –

+0

ОК. Когда я делаю то, что вы предлагаете, я получаю сообщение об ошибке в отношении типов данных. «LineDisplay» - это varchar (5), а идентификатор - int. Но мне нужно установить идентификатор в значение 'LineDisplay'. Итак, когда 'LineDisplay' - это список значений, выберите ID на основе оператора select. –

+0

Я понял. Строка 'LineDisplay' имела пустой varchar в начале строки. Когда я обрезаю эти символы, обновление работает. Спасибо за предложение @Robert Bain. –

ответ

0

Я хотел бы предложить, чтобы изменить код, чтобы что-то вроде этого, было бы гораздо более удобным для чтения

UPDATE UDSDiagnosisGroups SET 
    UDSDiagnosisCategoryID = d.UDSDiagnosisCategoryID 
from UDSDiagnosisGroups as g 
    inner join UDSDiagnosisCategories as d on 
     d.UDSDiagnosisCategory = 
      case 
       when g.LineDisplay in ('1-2', '3', '4', '4a', '4b') then 
        'Selected Infectious and Parasitic Diseases' 
       when g.LineDisplay in ('5', '6') then 
        'Selected Diseases of the Respiratory System' 
       when g.LineDisplay in ('7', '8', '9', '10', '11', '12', '13', '14', '14a') then 
        'Selected Other Medical Conditions' 
       when g.LineDisplay in ('15', '16', '17') then 
        ' Selected Childhood Conditions (limited to ages 0 through 17)' 
       when g.LineDisplay in ('18', '19', '19a', '20a', '20b', '20c', '20d') then 
        'Selected Mental Health and Substance Abuse Conditions' 
where 
    g.UDSDiagnosisCategoryID is null 

Тогда вы можете играть и делать select вместо update, чтобы увидеть, если строки, возвращаемые из UDSDiagnosisCategories действительны , У вас могут быть опечатки. Трудно сказать больше без данных.

0

Может быть, ваше значение столбца пуст, а не Null. Используйте ISNULL и попробуйте еще раз

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 ISNULL(UDSDiagnosisCategoryID,'') = ''