我的程序中有两个表来管理库存:
Articulos(项目):
id_articulo(id_item),nombre(name),tipo(kind)
Salidas(发货):
id_articulo(id_item),cant_sale(发货金额),imp_total(总计) 成本),almacen_destino(shipemt stock destiny),日期
我被要求做一个静态的产品清单,所以他们总是会以相同的顺序显示相同的项目,其中项目类型(tipo)=某事
当我想在日期之间搜索特定的货物库存desiny(almacen_destino)时,我无法获得所有相同类型的物品(tipo),因为它们没有发货
这是我到目前为止的查询:
select a.id_articulo, sum(s.cant_sale) as Cant_sale, sum(s.imp_total) as Imp_total
from articulos a left join salidas s
on a.id_articulo=s.id_articulo
WHERE a.tipo='EMPAQUES'
and FECHA BETWEEN '06/06/2012' AND '12/06/2012'
and s.almacen_destino like 'CERRO COLORADO'
group by a.id_articulo
它只显示该股票的发货项目,其中tipo(kind)=这些日期之间的Empaques,不好显示相同的信息加上所有其他相同类型的商品(tipo),即使发货也没有发货金额和总费用为空。
提前,谢谢。
答案 0 :(得分:3)
在外部表上放置过滤条件会将外部联接转换为内部联接。你试过了吗?
SELECT
a.id_articulo,
SUM(s.cant_sale) AS Cant_sale,
SUM(s.imp_total) AS Imp_total
FROM
dbo.articulos AS a
LEFT OUTER JOIN
dbo.salidas AS s
ON a.id_articulo = s.id_articulo
AND s.almacen_destino = 'CERRO COLORADO'
AND s.FECHA BETWEEN '20120606' AND '20120612'
WHERE a.tipo = 'EMPAQUES'
GROUP BY a.id_articulo;
我在这里猜到了一些事情:
FECHA
在salidas
中 - 如果没有,则将该AND移至WHERE子句。答案 1 :(得分:1)
您必须在WHERE
子句中包含必须使用LEFT JOIN
ed表的任何ON
子句块。