[英]Need a SQL select statement to return rows that have the same id in one column and distinct value in another column
[英]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 JOIN
与ltrim
上都相匹配的货盘的顺序。 由于可能有多个与一个订单关联的托盘,我们将每个托盘移动到一个名为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 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)
这将返回所有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.