我想做一个我想检查这样的条件的案例
如果列的值放电处置转换被放电到家庭/自我护理(常规收费)。 那么我需要将其更改为"Discharged to Home
"但即使它的值是 出院到家庭/自我护理 那么它也应该更改为"Discharged to Home
"。 谁能告诉我如何使这个查询更小?我知道这可以通过使用两种情况来实现,一种是带括号的,一种是不带括号的,但是还有其他方法可以使查询更小。
听起来你有这个:
UPDATE MyData
SET
DischargeDispositionConversion = 'Discharged to Home'
WHERE
DischargeDispositionConversion = 'Discharged to home/self care (routine charge)'
OR 'Discharged to home/self care'
但是,您不想单独测试案例。 坦率地说,这样做一点也不坏,如果只有两个有效条件,那么专门测试每个条件可能是完成它的最佳方法。 不过,如果你一心想让SQL更短,那么你可以这样做:
UPDATE MyData
SET
DischargeDispositionConversion = 'Discharged to Home'
WHERE
DischargeDispositionConversion LIKE 'Discharged to home/self care%'
请注意,这会带来各种陷阱。 任何以"出院到家/自我护理"开头的内容都将更改为"出院回家"。 假设该领域"出院到家/自我护理(违反医生的建议)"这第二个命令最终会破坏一条重要信息。
我不明白你为什么提出一个空格,但由于这两个值是
- 出院回家/自我护理
- 出院到家/自我护理(例行收费)
那么一个案例就可以了。
select
case
when DischargeDispositionConversion like 'Discharged to home/self care%'
then 'Discharged to Home'
else DischargeDispositionConversion
end
from
YourTable
如果要在 SSIS 派生列转换中编写代码,则可以将其编写为
FINDSTRING([DischargeDispositionConversion], "Discharged to home/self care", 1) == 1 ? "Discharged to Home" : [DischargeDispositionConversion]
鉴于您的评论,有多达 30 或 35 种情况,我建议不要使用 SQL 来做出此决定。 您应该创建一个解码表并连接到它。
这是一个高度灵活且易于维护的解决方案。 如果您想为其他代码类型创建映射,它还将扩展到"出院到家"以外的情况。 最后,如果您需要更改值,就像数据更新一样简单。 无需重新部署。
create table DischargeDisposition_Decode (tableCode varchar(50), revisedCode varchar(50))
insert into DischargeDisposition_Decode(tableCode, revisedCode) VALUES
( 'Discharged to home/self care (routine charge)', 'Discharged to Home' )
, ( 'Discharged to home/self care', 'Discharged to Home')
, ( 'Some other discharged to home code_1', 'Discharged to Home')
, ( 'Some other discharged to home code_2', 'Discharged to Home')
, ( 'Discharged to somewhere that is NOT home', 'Somewhere that is not home')
.
.
.
Select
isNull(ddd.revisedCode, MyData.DischargeDispositionConversion)
from
MyData
LEFT JOIN DischargeDisposition_Decode ddd
ON myData.DischargeDispositionConversion = ddd.tableCode