SQL - 如果所有行具有相同的"订单号"则返回一个值。在一列中有相同的"插槽"在另一个

时间:2017-11-19 15:38:03

标签: sql sql-server

我有一个表oeordhdr_sql,其中包含使用Ord_No作为唯一ID的订单的所有信息。在另一个表wsPKG中,我有每个托盘存储的信息。托盘可以与特定订单相关联,在这种情况下,它会在Org_Ord_No中获得一个值,以将其与oeordhdr_sql中的订单相关联。我有两个INNER JOIN ltrim以匹配托盘和订单。由于可以有多个托盘与一个订单相关联,因此我们将每个托盘移动到名为Bin_No的仓(TRK),以表明它已经发货。

到目前为止,我有这段代码

SELECT oeordhdr_sql.ord_no, wsPKG.Bin_no
FROM wsPKG
INNER JOIN oeordhdr_sql ON LTRIM(wsPKG.Org_Ord_no) = LTRIM(oeordhdr_sql.ord_no) 
WHERE wsPKG.Bin_no = 'TRK'

返回同一订单的多行。

   23708    TRK     
   23769    TRK     
   23769    TRK      
   23769    TRK     
   23769    TRK     
   23708    TRK     
   23708    TRK     

我希望能够为我的送货经理返回一个值,以显示与特定订单相关的所有托盘何时位于TRK中。该值可以发货。最终我也会有一个加载状态,如果有些是TRK而不是全部。

2 个答案:

答案 0 :(得分:0)

我想你想要一个<?php $body = "This question is a {{x}} of {{y}} within SO."; preg_match_all('/\{\{(.*?)\}\}/', $body, $matches); $searches = $matches[0]; $replaces = ['possible duplicate', '@21100035']; echo str_replace($searches, $replaces, $body); // Output // This question is a possible duplicate of @21100035 from SO. GROUP BY

HAVING

这将返回所有SELECT oh.ord_no FROM wsPKG p INNER JOIN oeordhdr_sql oh ON ltrim(p.Org_Ord_no) = ltrim(oh.ord_no) GROUP BY oh.ord_no HAVING MIN(p.Bin_no) = 'TRK' AND MIN(p.Bin_no) = MAX(p.Bin_no) 个所有bin编号为oh.ord_no的内容(它忽略'TRK' s,因此如果数据有NULL s,您可能需要指定与那些垃圾箱号码有关。

注意:NULL条件可疑。应该没有理由在相关表之间的JOIN键上使用TRIM()。如果键是数字,这是没有意义的。如果键是字符串,则应存储它们而不带前导或尾随空格。

答案 1 :(得分:0)

尝试以下方法:

Select DISTINCT OS.ord_no, WP.Bin_no
FROM wsPKG WP
LEFT JOIN oeordhdr_sql OS on ltrim(WP.Org_Ord_no)=ltrim(OS.ord_no) AND WP.Bin_no='TRK'

HTH

感谢。