两个斯特里格之间的间距相同



我想做一个我想检查这样的条件的案例

如果列的值放电处置转换被放电到家庭/自我护理(常规收费)。 那么我需要将其更改为"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

最新更新