繁体   English   中英

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

[英]SQL - Return a value if all rows that have the same “order number” in one column have the same “slot” in another

我有一个表oeordhdr_sql ,其中包含使用Ord_No作为唯一ID的订单的所有信息。 在另一个表wsPKG每个托盘都存储有信息。 可以将一个托盘关联起来以按特定顺序发货,在这种情况下,它会在Org_Ord_No获取一个值,以将其与oeordhdr_sql的订单oeordhdr_sql 我有一个INNER JOINltrim上都相匹配的货盘的顺序。 由于可能有多个与一个订单关联的托盘,我们将每个托盘移动到一个名为TRK的箱( Bin_No )中,以表明它已经发货。

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

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中,但不是全部,我也将处于“正在加载”状态。

我想你想一个GROUP BYHAVING

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)

这将返回所有oh.ord_no ,其中所有仓号均为'TRK' (它将忽略NULL ,因此,如果数据包含NULL ,则可能需要指定如何处理这些仓号。

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

请尝试以下操作:

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'

高温超导

谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM