Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 带条件的SQL左连接查询_Sql Server_Left Join - Fatal编程技术网

Sql server 带条件的SQL左连接查询

Sql server 带条件的SQL左连接查询,sql-server,left-join,Sql Server,Left Join,我的程序中有两个表格用于管理库存: 关节(项目): 标识(标识项)、名称(名称)、tipo(种类) Salidas(发货): id商品(id商品)、无法销售(装运金额)、进口总额(总额) 成本),almacen_destino(shipemt stock destiny),日期 我被要求做一个产品的静态列表,这样它们总是以相同的顺序显示相同的项目,其中项目种类(tipo)=一些东西 当我想在两个日期之间搜索特定的装运库存设计(almacen_destino)时,我无法获得所有同类(tipo)的项

我的程序中有两个表格用于管理库存:

关节(项目):

标识(标识项)、名称(名称)、tipo(种类)

Salidas(发货):

id商品(id商品)、无法销售(装运金额)、进口总额(总额) 成本),almacen_destino(shipemt stock destiny),日期

我被要求做一个产品的静态列表,这样它们总是以相同的顺序显示相同的项目,其中项目种类(tipo)=一些东西

当我想在两个日期之间搜索特定的装运库存设计(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(种类)=Empaques的已发货项目,我想显示相同的信息加上所有其他未发货的相同种类(tipo)的项目,即使发货金额和总成本为空


事先,谢谢。

您必须在
ON
子句中包含任何必须与
左连接
ed表结合的
WHERE
子句块。

您必须在
ON
子句中包含任何必须与
左连接
ed表结合的
WHERE
子句块。

将筛选条件放在外部表将外部联接转换为内部联接。您是否尝试过:

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
    中-如果不是,则将其移动到WHERE子句
  • 你的日期是d/m/y。请始终使用明确的日期格式-您可能在英国或加拿大,但并非您的观众中的每个人都在,我们无法读懂您的心思

将筛选条件放在外部表上会将外部联接转换为内部联接。您是否尝试过:

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
    中-如果不是,则将其移动到WHERE子句
  • 你的日期是d/m/y。请始终使用明确的日期格式-您可能在英国或加拿大,但并非您的观众中的每个人都在,我们无法读懂您的心思

lft联接不会得到您想要的,因为您正在筛选该表。这就限制了它只在“塞罗科罗拉多”的地方。您可以与另一个查询进行联合以获取其他信息,也可以删除该左联接筛选器并继续执行左联接表中未包含的其他操作。lft联接无法获得所需的内容,因为您正在筛选该表。这就限制了它只在“塞罗科罗拉多”的地方。您可以与另一个查询进行联合以获取其他信息,或者您可以删除左连接筛选器并继续执行左连接表中未包含的其他操作。非常感谢,它解决了我的问题,并且对日期格式感到抱歉,如果
s.FECHA
是包括时间在内的日期时间,我也会记住它,你想避免在两个时间之间:非常感谢,它解决了我的问题,对日期格式感到抱歉,我也会记住,如果
s.FECHA
是datetime,包括时间,你想避免在两个时间之间: