我对SQL完全不熟悉,只是通过提出一些可以帮助我的查询来加快我的工作。
我的示例代码(我将查询限制为一个订单,以显示问题):
SELECT dbo.BI.nmdos, dbo.BI.OBRANO, dbo.bi.ref
, dbo.BI.design, dbo.BI.LOBS, dbo.BI.qtt, dbo.sa.stock
FROM dbo.BI
LEFT JOIN dbo.SA on dbo.SA.REF=dbo.BI.REF
WHERE dbo.BI.FECHADA=0 AND dbo.BI.LOBS <> 'S'
AND dbo.BI.QTT >= 1 AND dbo.BI.nmdos = 'Encomenda Cliente'
AND dbo.BI.obrano = 2496
我的结果:
Encomenda Cliente 2496 rty 5.0000 NULL
Encomenda Cliente 2496 01103402 TONER OKI P/B4000 1.0000 0.000
Encomenda Cliente 2496 PC PORTES - COMPRAS 2.0000 1429.000
Encomenda Cliente 2496 CXDVDNORMBL CAIXA DE DVD NORMAL PRETO FOSCO - 14MM (100) 10.0000 4.000
Encomenda Cliente 2496 CXDVDNORMBL CAIXA DE DVD NORMAL PRETO FOSCO - 14MM (100) 10.0000 0.000
Encomenda Cliente 2496 CXDVDNORMBL CAIXA DE DVD NORMAL PRETO FOSCO - 14MM (100) 10.0000 0.000
我的问题: 我需要使用库存= 0的产品代码“CXDVDNORMBL”删除最后两行。
我该怎么办?
泰
答案 0 :(得分:1)
您需要添加dbo.SA.stock&gt; 0到您的加入条件。这样它只会加入来自SA的有一些库存的行。
SELECT dbo.BI.nmdos, dbo.BI.OBRANO, dbo.bi.ref, dbo.BI.design, dbo.BI.LOBS, dbo.BI.qtt, dbo.sa.stock
FROM dbo.BI
LEFT JOIN dbo.SA on dbo.SA.REF=dbo.BI.REF AND dbo.SA.stock > 0
WHERE dbo.BI.FECHADA=0 AND dbo.BI.LOBS<>'S' AND dbo.BI.QTT>=1 AND dbo.BI.nmdos='Encomenda Cliente' AND dbo.BI.obrano=2496
答案 1 :(得分:0)
您的意思是在这些产品缺货时要从订单中删除行吗?只需运行另一个查询,删除之前选择的相同内容,但添加WHERE stock = 0?
不确定完全删除这些行是明智的。您可能稍后需要该信息,例如,如果您要向客户发送电子邮件,说某些商品无法包含在订单中,或者只是记录客户订购的商品(即使是相关信息仍然是非常相关的信息)它从未交付过)。因此,我认为只要你选择它就过滤掉0股票的任何行可能会更好。或者,如果您出于某种原因确实想要将这些行排除在订单表之外,请将它们放在名为outOfStock的另一个表中,并将订单ID链接到该表。