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のみを返します。

on_handフィールドに関係なく、すべてのbranch_nosを取得しようとしていますが、whereon_hand句を使用しています。

on_hand句を削除すると問題は解決しますが、0を含む不要な行が大量に発生します。

SQL SERVER2008R2を使用しています。

ご指導ありがとうございます。情報が足りない場合はお詫び申し上げます。

------------------------------------------ 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 に答える