SQL Server:如何在WHERE子句中使用IF ELSE或其他东西

时间:2018-05-20 19:39:26

标签: sql-server

我有这张桌子:

| id_product | tw_kod | ean  |nazwa     |stan  |cena_detaliczna |
|      1     | 9007   | 9008 | ARR 2016 | 2    |            2490|
|     2      | 9008   | 90085| ION 2018 | NULL |            1450|

和这个查询:

select
    tw.id as id_product,
    tw.kod as tw_kod,
    tw.kod as ean,
    tw.nazwa as nazwa,
    sm.stanHandl as stan,
    cn.cena as cena_detaliczna
from 
    [HM].[TW] as tw
join 
    [SSCommon].[STElements] as elem on tw.znacznik = elem.Shortcut
left join 
    [HM].[SM] as sm on tw.id = sm.idtw
left join 
    [HM].[CN] as cn on tw.id = cn.idpm
where
    elem.Shortcut = '66'
    and elem.ElementKindId = '54'
    --and sm.magazyn = 2
    and cn.typceny = 1
order by 
    nazwa

有些产品在[HM]。[SM]表中,有些 - 不是。我使用LEFT JOIN [HM]。[SM]来显示[HM]。[TW]中的所有产品,但是当我使用WHERE子句(sm.magazyn = 2)时它没有显示我的产品,这就是为什么我评论它。我试图在WHERE中使用IF ELSE,但我没有正确的结果。感谢

1 个答案:

答案 0 :(得分:3)

只需在FROM部分添加谓词,如下所示:

select
    tw.id as id_product,
    tw.kod as tw_kod,
    tw.kod as ean,
    tw.nazwa as nazwa,
    sm.stanHandl as stan,
    cn.cena as cena_detaliczna
from [HM].[TW] as tw
join [SSCommon].[STElements] as elem on tw.znacznik = elem.Shortcut
left join [HM].[SM] as sm on tw.id = sm.idtw and sm.magazyn = 2
left join [HM].[CN] as cn on tw.id = cn.idpm and cn.typceny = 1
where
    elem.Shortcut = '66'
    and elem.ElementKindId = '54'
    order by nazwa

NULL的同情导致空结果集