【发布时间】:2016-11-27 17:29:21
【问题描述】:
我想使用 case 语句更新一个表中的一列但多行。 这是更新声明:
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 表中只更新了 1 行。
更新的行是LineDisplay 值为1-2 的行。
所有其他值仍为 NULL。
我哪里出错了?在我看来,我正在按照我找到的示例进行操作,但只更新了 1 行,而不是表中的所有行。
【问题讨论】:
-
对我来说是正确的。要查看为什么没有匹配,只需选择 case 语句,即 I.E.删除 UPDATE UDSDiagnosisGroups SET UDSDiagnosisCategoryID = 并将其替换为 SELECT。然后在最后放置一个 ELSE LineDisplay,当你没有得到匹配时,你会看到 LineDisplay 的值是什么。
-
好的。当我按照您的建议进行操作时,我收到有关数据类型的错误。
LineDisplay是 varchar(5),ID 是 int。但我需要将 ID 基于LineDisplay值。因此,当LineDisplay是这个值列表时,根据 select 语句选择 ID。 -
我想通了。
LineDisplay字符串的开头有一个空的 varchar。当我修剪这些字符时,更新有效。感谢@Robert Bain 的建议。 -
@RobertBain - 根据您的建议创建一个答案,我会检查我的问题是否已回答。
-
我已将我的建议添加为答案。
标签: sql sql-server case