我有这个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
答案 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)
答案 2 :(得分:0)
如果计算的任何部分为null,则整个事物将为null。你可以这样使用这个事实:
nullif(nullif(sbd.Dosage, ''), '1') + '/' + nullif(nullif(sbd.Units, ''), '1') AS DosagePerUnits
当其中一列为'','1'或null
时,这将导致DosagePerUnits为空我以为我在这里有一个非常聪明的答案。哦,我想这不是那么聪明。有谁知道为什么我不能写评论?