0

我有一个如下的sql:

SELECT ib.branch_no,
       ib.on_hand,
       p.weightedav,
       p.item_code,
FROM physical p
INNER JOIN 
       item_branch as ib on p.item_code = ib.item_code
WHERE ib.on_hand <> 0

此 SQL 仅返回那些具有 on_hand <> 0 的 branch_no。

我正在尝试获取所有的 branch_nos,而不考虑 on_hand 字段,但仍然使用 where on_hand 子句。

去掉 on_hand 子句解决了我的问题,但给了我大量不需要的 0 行。

我正在使用 SQL SERVER 2008 R2。

提前感谢您的任何指导。如果我遗漏任何信息,请道歉。

------------------------------整个 SQL 查询(更新)-- ------------------------------------------

select  
     ib.branch_no, 
    p.weighted_av,
    p.item_code, 
    p.x_value, 
    p.y_value, 
    ib.on_hand,
    p.on_hand as PhysicalOH,
    ip.price,
    i.item_code as StyleCode, 
    i.description, 
    i.cat1, 
    i.cat2, 
    i.cat3, 
    i.cat4, 
    np.is_style_yn, 
    si.supplier_code ,
            ysv.sort as YSort
from physical  as p
    left outer JOIN 
    item_branch as ib on p.item_code = ib.item_code -- and ib.on_hand <> 0
    INNER JOIN 
    item_price as ip on p.item_code = ip.item_code  and ip.price_type = 'P1'
    INNER JOIN 
    style_values as sv on p.style_code = sv.style_code and p.x_value = sv.value  
    INNER JOIN 
    style_values as ysv on p.style_code = ysv.style_code and p.y_value = ysv.value and ysv.axis = 'Y'  
    INNER JOIN 
    ITEM as i on p.style_code = i.item_code 
    INNER JOIN 
    NON_PHYSICAL as np ON i.item_code = np.item_code and np.is_style_yn = 1
    INNER JOIN 
    supplier_item as si ON i.item_code = si.item_code and si.pref_supp_no = 1
where --ib.on_hand <> 0 and  
sv.axis = 'X' and
i.item_code in 
    (SELECT ITEM.item_code
     FROM ITEM 
            INNER JOIN 
            NON_PHYSICAL ON ITEM.item_code = NON_PHYSICAL.item_code 
            LEFT JOIN
            supplier_item ON Item.item_code = supplier_item.item_code  and  pref_supp_no = 1                        
    WHERE NON_PHYSICAL.is_style_yn = 1 and  ITEM.cat1 = 'Verge Sportswear Ltd' )
order by 
        si.supplier_code, 
        i.cat4, 
        i.cat3, 
        i.cat2, 
        i.cat1,
        sv.sort
4

1 回答 1

0

尝试这个:

SELECT ib.branch_no,
       ib.on_hand,
       p.weightedav,
       p.item_code,
FROM physical p
INNER JOIN 
       item_branch as ib on (p.item_code = ib.item_code AND ib.on_hand <> 0)
于 2012-12-21T15:41:46.047 回答