CASE语句如果是SQL Server中的ELSE

时间:2013-07-23 18:28:05

标签: sql sql-server tsql

我有这个select声明,我想要完成的是获取数据 仅当DosagePerUnits不等于空或1并且Dosage不为空或1时才会Units列。

有人能帮助我吗?

select 
    sbd.Code, c.Description, sbd.Dosage, 
    Case 
        when sbd.Units = '' then '1' 
        else sbd.Units 
    end as Units, 
    ad.ApptDate, sbd.RCycle, sbd.RWeek, sbd.RDay, 
    t.HistoryOrder, t.TypeId, sbd.Dosage + '/' + sbd.UnitsAS DosagePerUnits
from
    bill_SuperBillDetail sbd, 
    bill_ProcedureVerification pv, 
    AppointmentData ad,
    CPTCode c, 
    CPTType t
where 
    sbd.AccessionNumber = pv.AccessionNumber
    and pv.ApptId = ad.ApptId
    and ad.PatientId = 443
    and ad.ApptDate <= GETDATE()
    and ad.ApptDate > '2009-11-15 00:00:00.000'
    and c.TypeId = t.TypeId

3 个答案:

答案 0 :(得分:1)

根据你的描述,它应该是这样的:

CASE WHEN ISNULL(sbd.Dosage, '1') <> '1' AND ISNULL(sbd.Units, '1') <> '1' THEN
sbd.Dosage + '/' + sbd.Units
ELSE NULL END AS DosagePerUnits

ISNULL(x, 1)如果为空,则将x替换为1。因此,如果x为1或NULL,则ISNULL(x, 1) = 1。

编辑: 更改为[Dosage]和[Unit]都是 varchar 的假设,如评论所示。

答案 1 :(得分:0)

而不是  sbd.Units =''然后'1'的情况下,sbd.Units以单位结束, 尝试 合并(sbd.Units,1)为单位,

答案 2 :(得分:0)

如果计算的任何部分为null,则整个事物将为null。你可以这样使用这个事实:

nullif(nullif(sbd.Dosage, ''), '1') + '/' + nullif(nullif(sbd.Units, ''), '1') AS DosagePerUnits

当其中一列为'','1'或null

时,这将导致DosagePerUnits为空

我以为我在这里有一个非常聪明的答案。哦,我想这不是那么聪明。有谁知道为什么我不能写评论?