我要拍,我想检查这样空间相同
条件,如果列DischargeDispositionConversion的值出院回家/自我护理(常规费用)的情况下。然后我需要把它变成“Discharged to Home
”,但即使其值出院回家/自我保健然后还应该更改为“Discharged to Home
”。 任何人都可以告诉我如何使这个查询更小?我知道这可以通过使用两种情况来实现,一种使用括号,一种使用不使用括号,但是有任何其他方式可以使查询更小。
我要拍,我想检查这样空间相同
条件,如果列DischargeDispositionConversion的值出院回家/自我护理(常规费用)的情况下。然后我需要把它变成“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%'
请注意,这个自带的各种陷阱。任何以“解除家庭/自我照顾”开头的内容都将变为“解除家园”。假设该领域已经“解除了家庭/自我照顾(反对医生的建议)”这第二个命令最终会毁掉一个重要的信息。
其实我想使它更短,因为有多个条件,我需要检查各地30 35,这只是其中的一个。我只是想知道是否有其他方法可以在不使用case语句的情况下执行相同的操作,以便查询更小。 –
请看我的第二个解决方案,因为我认为有更好的方法来处理这么多的案例。 – Greenspark
我不明白为什么你带来了一个空间,但由于这两个值
话单的情况下是可行的。
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来做出这个决定。你应该创建一个解码表并加入它。
这是一种高度灵活和易于维护的解决方案。如果您想为其他代码类型创建映射,它也将延伸到“Discharged to Home”之外的情况。最后,如果您需要更改这些值,它就像数据更新一样简单。不需要重新部署。
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
这有什么错两个条件?似乎是理想的解决方案。 – scsimon
不太明白你的要求,也许样本数据会很好。否则,听起来你是对的。我们不知道如何使查询更小,除非我们看到您的查询样品或一些数据样本 – Simon
请将您的查询,以便人们可以帮你 –