2017-08-28 60 views
-2

我要拍,我想检查这样空间相同

条件,如果列DischargeDispositionConversion的值出院回家/自我护理(常规费用)的情况下。然后我需要把它变成“Discharged to Home”,但即使其值出院回家/自我保健然后还应该更改为“Discharged to Home”。 任何人都可以告诉我如何使这个查询更小?我知道这可以通过使用两种情况来实现,一种使用括号,一种使用不使用括号,但是有任何其他方式可以使查询更小。

+0

这有什么错两个条件?似乎是理想的解决方案。 – scsimon

+1

不太明白你的要求,也许样本数据会很好。否则,听起来你是对的。我们不知道如何使查询更小,除非我们看到您的查询样品或一些数据样本 – Simon

+1

请将您的查询,以便人们可以帮你 –

回答

0

这听起来像你有这样的:

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%' 

请注意,这个自带的各种陷阱。任何以“解除家庭/自我照顾”开头的内容都将变为“解除家园”。假设该领域已经“解除了家庭/自我照顾(反对医生的建议)”这第二个命令最终会毁掉一个重要的信息。

+0

其实我想使它更短,因为有多个条件,我需要检查各地30 35,这只是其中的一个。我只是想知道是否有其他方法可以在不使用case语句的情况下执行相同的操作,以便查询更小。 –

+0

请看我的第二个解决方案,因为我认为有更好的方法来处理这么多的案例。 – Greenspark

0

我不明白为什么你带来了一个空间,但由于这两个值

  • 出院回家/自我保健
  • 出院回家/自我护理(常规充电)

话单的情况下是可行的。

select 
    case 
     when DischargeDispositionConversion like 'Discharged to home/self care%' 
     then 'Discharged to Home' 
     else DischargeDispositionConversion 
    end 
from 
    YourTable 
0

如果你正在写在SSIS派生列转换的代码,你可以把它写成

FINDSTRING([DischargeDispositionConversion], "Discharged to home/self care", 1) == 1 ? "Discharged to Home" : [DischargeDispositionConversion] 
0

鉴于您的评论,有多达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 
相关问题