0

我有这个select声明,我想要完成的是
DosagePerUnits只有在Dosage不等于空或 1 且不为空或 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
4

3 回答 3

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 为空,则将 x 替换为 1。ISNULL(x, 1) 如果 x 为 1 或 NULL,则 = 1 。

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

于 2013-07-23T18:38:17.437 回答
0

而不是 Case when sbd.Units = '' then '1' else sbd.Units end as Units,尝试 Coalesce(sbd.Units,1) as Units,

于 2013-07-23T18:32:46.377 回答
0

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

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

这将导致 DosagePerUnits 在其中一列为 ''、'1' 或 null 时为 null

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

于 2013-07-23T18:41:25.793 回答