2013-07-23 155 views
0

我有這個select聲明,我所要完成的是讓在
DosagePerUnits列數據只有Dosage不等於空或1,如果Units不爲空或1 。CASE語句IF ELSE在SQL Server

有人能幫助我嗎?的

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

[不良習慣踢:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style- joins.aspx) - 舊式*逗號分隔的表*樣式列表已停止使用ANSI - ** 92 ** SQL標準(大於** 20年前) –

回答

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。所以ISNULL(x, 1) = 1如果x是1或NULL。

編輯: 更改爲[劑量]和[單位]均爲varchar,正如您的評論所示。

+1

當我嘗試實現i get以下內容:將varchar值「235.67」轉換爲數據類型int時轉換失敗。 – Robert

+0

我編輯了我的答案......雖然我不確定浮點數是否存儲爲字符串是一個好主意。 – KekuSemau

+0

工作很好! – Robert

0

代替 情況下,當sbd.Units = '',然後 '1' 中的其他sbd.Units端爲單位, 嘗試 聚結(sbd.Units,1)爲單位,

0

如果計算的任何部分爲空,整個事情將是無效的。你可以使用這個事實是這樣的:

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

這將導致DosagePerUnits被空當一列是「」,「1」或空

,我想我有一個非常聰明的答案在這裏。哦,我想這不是那麼聰明。有誰知道我爲什麼無法寫評論?