2012-06-25 9 views
0

我有這兩個表查詢:SQL左從我的程序來管理股票加入用條件

Articulos(項):

id_articulo(id_item),農佈雷(名稱),TIPO(樣)

Salidas(出貨):

id_articulo(id_item),cant_sale(裝運量),imp_total(託塔升 成本),almacen_destino(shipemt股票的命運),日期

我被要求做的產品的靜態列表,使他們將始終顯示在相同的順序,其中項目種類(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

lft加入不會得到你想要的,因爲你正在過濾該表。這限制了它只能在'CERRO COLORADO'註定的地方。您可以與另一個查詢進行聯合以獲取其他信息,或者可以刪除該左側聯接篩選器,然後繼續執行其他不在左側聯接表中的其他信息。 – Limey

回答

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; 

我猜幾件事情在這裏:

  • FECHAsalidas - 如果沒有,再往前一點,並在WHERE子句。
  • 你的日期是d/m/y。請始終使用明確的日期格式 - 您可能在英國或加拿大,但不是所有觀衆都是,並且我們無法閱讀您的想法。
+0

非常感謝,它解決了我的問題,並且對日期格式感到抱歉,請不要忘記 –

+0

如果's.FECHA'是包含時間的日期時間,則要避免BETWEEN:http://sqlblog.com/博客/ aaron_bertrand /存檔/ 2011/10/19 /什麼-DO之間和最魔鬼具有功能於common.aspx –

1

您必須包含任何WHERE子句塊必須與ON子句中的LEFT JOIN ed表。