2017-03-02 68 views
1

我试图从我的表中获得2个款项,一个是有序项目表,另一个是收到项目表。以我目前的查询我得到的2014年总和是从106(实际总和我想)乘以19(记录数)总和结果正在乘以行数

select POD.PO_No, SUM(POD.Qty) as Qty, RRD.RR_No, SUM(RRD.QtyRcvd) as QtyReceived 
from tbl_PODetail POD inner join tbl_RRDetail RRD on POD.PO_No = RRD.PO_Reference 
where POD.PO_No = 'PO-000001' 
group by POD.PO_No, RRD.RR_No 

什么原因造成这一点,我怎么能改正?

样品表

PO No  | Item | Qty 
------------------------- 
PO-0000001 | Item A | 5 
PO-0000001 | Item B | 7 
PO-0000001 | Item B | 3 

RR No  | Item | Qty | PO_Reference 
---------------------------------------- 
RR-0000001 | Item A | 5 | PO-0000001 
RR-0000001 | Item B | 7 | PO-0000001 
RR-0000001 | Item B | 3 | PO-0000001 

预期输出:

PO No  | Qty | RR No  | Qty Rcvd 
----------------------------------------- 
PO-0000001 | 15 | RR-0000001 | 15 

我能得到什么

PO No  | Qty | RR No  | Qty Rcvd 
----------------------------------------- 
PO-0000001 | 45 | RR-0000001 | 45 
+1

请邮寄样本输入数据和预期的输出 – GurV

+1

请分享我们的样本数据,我们可以帮助你关于你的问题。 –

+0

@GurV新增样本数据 – crimson589

回答

1

你错过了加盟POD.Item = RRD.Item,这就是为什么你得到相乘的记录。

select POD.PO_No, SUM(POD.Qty) as Qty, RRD.RR_No, SUM(RRD.QtyRcvd) as QtyReceived 
from tbl_PODetail POD 
inner join tbl_RRDetail RRD on POD.PO_No = RRD.PO_Reference and POD.Item = RRD.Item 
where POD.PO_No = 'PO-000001' 
group by POD.PO_No, RRD.RR_No 
0

这个回答反映了我的问题的理解是什么。看来您希望按采购订单编号汇总tbl_PODetail,并将总和计算为数量。然后,您想要将第二个表tbl_RRDetail汇总为两列,并将第一个汇总结果加入仅使用PO编号的结果。如果这是正确的,那么一种方法是使用两个单独的子查询进行聚合并将它们结合在一起。

WITH cte1 AS (
    SELECT RR_No, PO_Reference, SUM(QtyRcvd) AS QtyReceived 
    FROM tbl_RRDetail 
    GROUP BY RR_No, PO_Reference 
), 
WITH cte2 AS (
    SELECT PO_No, SUM(Qty) AS Qty 
    FROM tbl_PODetail 
    GROUP BY PO_No 
) 
SELECT t2.PO_No, t2.Qty, t1.RR_No, t1.QtyReceived 
FROM cte1 t1 
INNER JOIN cte2 t2 
    ON t1.PO_Reference = t2.PO_No 
WHERE t1.PO_No = 'PO-000001' 
0

尝试在子查询聚集的价值观,而加入他们事后

Select * 
From (
    Select po_no, sum(qty) qty 
    From tbl_PODetail 
    Group by po_no 
) p join (
    Select rr_no, po_reference, sum(qty) qty_rcvd 
    From tbl_RRDetail 
    Group by rr_no, po_reference 
) r on p.po_no = r.po_reference 
Where p.po_no = 'PO-0000001' 
0

尝试此也。希望这可以帮助。

 select * into #table1 from (     
select 'PO-0000001' as PO_No,'Item A' as Item,5 as QTY union 
select 'PO-0000001' as PO_No,'Item B' as Item,7 as QTY union 
select 'PO-0000001' as PO_No,'Item C' as Item,3 as QTY 
)t 

select * into #table2 from (
select 'RR-0000001' as RR_No,'Item A' as Item,5 as QTY,'PO-0000001' as PO_Referrence union 
select 'RR-0000001' as RR_No,'Item B' as Item,7 as QTY,'PO-0000001' as PO_Referrence union 
select 'RR-0000001' as RR_No,'Item C' as Item,3 as QTY,'PO-0000001' as PO_Referrence 
)t 

select t1.PO_No,sum(t2.qty) as 'Qty' ,t2.RR_no,sum(t1.qty) as 'QTY Rcvd' 
from #table1 t1 
inner join #table2 t2 
on t1.PO_no=t2.PO_Referrence and t1.item=t2.item 
group by t1.PO_No,t2.RR_no