SQL查询连接表,获取重复数据

SQL查询连接表,获取重复数据,sql,left-join,Sql,Left Join,所以我在这里尝试连接多个表。我需要从上一个表中抓取几列来完成查询。尽管如此,当我在最后一个表上进行连接时,最终会得到多行。顶部返回在联接之后,底部返回在联接之前。 以下是我的疑问: SELECT prh_nbr as 'PO', ad_name as 'Supplier', pt_part as 'Part Number', pt_desc1 as 'Part Description', prh_rcvd as 'Qty Received', CAST(prh_qty_ord as

所以我在这里尝试连接多个表。我需要从上一个表中抓取几列来完成查询。尽管如此,当我在最后一个表上进行连接时,最终会得到多行。顶部返回在联接之后,底部返回在联接之前。

以下是我的疑问:

SELECT 
prh_nbr as 'PO', 
ad_name as 'Supplier', 
pt_part as 'Part Number', 
pt_desc1 as 'Part Description', 
prh_rcvd as 'Qty Received', 
CAST(prh_qty_ord as int) as 'Quantity Ordered', 
prh_pur_cost as 'Purchase Cost', 
(prh_pur_cost * prh_rcvd) as 'Total Cost', 
CAST(e.prh_rcp_date As Date) As 'Date Received' 
    from qad_repl.dbo.pod_det_sql as a
    LEFT OUTER JOIN qad_repl.dbo.po_mstr_sql as b ON (a.pod_nbr = b.po_nbr)
    LEFT OUTER JOIN qad_repl.dbo.ad_mstr_sql as c ON (b.po_vend = c.ad_addr)
    LEFT OUTER JOIN qad_repl.dbo.pt_mstr_sql as d ON (a.pod_part = d.pt_part)
    LEFT OUTER JOIN qad_repl.dbo.prh_hist_sql as e ON (po_nbr = e.prh_nbr)
    where pt_part is not null and po_nbr is not null and pod_qty_rcvd > 0
    and prh_nbr = 'PO1701' and prh_rcp_date >= '2015-01-21' and prh_rcp_date <= '2015-01-22'
我不确定您需要/想要查看多少信息,但我正在尽可能保持这些信息的干净

当试图加入我的上一个表prh_hist_sql时,我似乎只能加入PO编号和行号。。在上面的例子中,我做了po_nbr,这就是为什么我得到的是四行而不是两行。。。如果我做行号,我会得到更多,如图所示

有人有什么办法帮我吗? 如果需要,我可以显示更多信息,只需询问。

这可能有用

SELECT prh_nbr as 'PO', ad_name as 'Supplier', pt_part as 'Part Number', pt_desc1 as 'Part Description', prh_rcvd as 'Qty Received', 
CAST(prh_qty_ord as int) as 'Quantity Ordered', prh_pur_cost as 'Purchase Cost'
    , (prh_pur_cost * prh_rcvd) as 'Total Cost'
    , (select max(prh_rcp_date) from prh_hist_sql where prh_nbr = b.po_nbr and prh_rcp_date >= '2015-01-21' and prh_rcp_date <= '2015-01-22') 'Date Received' 
from qad_repl.dbo.pod_det_sql as a
LEFT OUTER JOIN qad_repl.dbo.po_mstr_sql as b ON (a.pod_nbr = b.po_nbr)
LEFT OUTER JOIN qad_repl.dbo.ad_mstr_sql as c ON (b.po_vend = c.ad_addr)
LEFT OUTER JOIN qad_repl.dbo.pt_mstr_sql as d ON (a.pod_part = d.pt_part)
where pt_part is not null and po_nbr is not null and pod_qty_rcvd > 0
    and prh_nbr = 'PO1701' 
    and exists(select 1 from prh_hist_sql where prh_nbr = b.po_nbr and prh_rcp_date >= '2015-01-21' and prh_rcp_date <= '2015-01-22')

不要在历史记录表中加入,而是使用子查询指定条件并聚合希望接收日期的字段

我算出了,在PO和行中加入。。。那就把它区分开来!:D

SELECT DISTINCT pod_nbr as 'PO', ad_name as 'Supplier', pt_part as 'Part Number', pt_desc1 as 'Part Description'
   from qad_repl.dbo.pod_det_sql as a
LEFT OUTER JOIN qad_repl.dbo.po_mstr_sql as b ON (a.pod_nbr = b.po_nbr)
LEFT OUTER JOIN qad_repl.dbo.ad_mstr_sql as c ON (b.po_vend = c.ad_addr)
LEFT OUTER JOIN qad_repl.dbo.pt_mstr_sql as d ON (a.pod_part = d.pt_part)
LEFT OUTER JOIN qad_repl.dbo.prh_hist_sql as e ON (po_nbr = e.prh_nbr and pod_line = e.prh_line)
where pt_part is not null and po_nbr is not null and pod_qty_rcvd > 0
and pod_nbr = 'PO1701'

你想做一个工会吗?将null添加到较短的选择列表中。如果我理解正确,您希望接收单个日期…您是否只想从您当前返回的结果集中的prh_hist_sql历史记录表中获取最近的prh_hist_日期接收日期?我不太确定UNION ALL如何工作。。我现在正在玩弄它,看看能不能让它工作@jarlh@Madison如果“当前结果集”指的是只有两行的查询,则基本上是肯定的。。。我需要将接收数量、订购数量、采购成本、总成本和接收日期添加到我的当前结果中set@KyleRickaby如果您在查询中指定了从中绘制每个选定字段的表,例如a.phr\u nbr,则会有所帮助。例如,它不喜欢这样,它无法确定第一个选择中的prh\u nbr是什么。。。。你的名字是卡罗尔的好照片!!!:D
SELECT DISTINCT pod_nbr as 'PO', ad_name as 'Supplier', pt_part as 'Part Number', pt_desc1 as 'Part Description'
   from qad_repl.dbo.pod_det_sql as a
LEFT OUTER JOIN qad_repl.dbo.po_mstr_sql as b ON (a.pod_nbr = b.po_nbr)
LEFT OUTER JOIN qad_repl.dbo.ad_mstr_sql as c ON (b.po_vend = c.ad_addr)
LEFT OUTER JOIN qad_repl.dbo.pt_mstr_sql as d ON (a.pod_part = d.pt_part)
LEFT OUTER JOIN qad_repl.dbo.prh_hist_sql as e ON (po_nbr = e.prh_nbr and pod_line = e.prh_line)
where pt_part is not null and po_nbr is not null and pod_qty_rcvd > 0
and pod_nbr = 'PO1701'