Sql server sql查询帮助

Sql server sql查询帮助,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,我有一个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仅返回手头上有0的分支 我试图获取所有分支编号,而不考虑on_hand字段,但

我有一个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仅返回手头上有0的分支

我试图获取所有分支编号,而不考虑on_hand字段,但仍使用where on_hand子句

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

我正在使用SQLServer2008R2

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

---------------------整个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
试试这个:

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)

不选择不同的ib.branch\u no,p.weightedav,p.item_代码来自物理p内部JOIN item_分支作为p.item_代码=ib上的ib.item_代码如果您不关心手头的值,并且它唯一的值不是带回那么多重复项,那么您需要做什么?我仍然需要where子句,因为这限制了我的结果,并且只得到手头的值=0的branchno。您正在连接两个表因此,不管怎样,您只会得到手头值不是0的分支。\u no。我在sqlfiddle中进行了尝试,当我删除where条件时,我也得到了所有分支。\u no。您能给我们一个查询演示,以便我们可以看到您的表吗?