сумма результата умножается на количество строк

64
7

Я пытаюсь получить 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

спросил(а) 2021-01-19T17:31:55+03:00 6 месяцев назад
1
Решение
63

Вы пропустили 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

ответил(а) 2021-01-19T17:31:55+03:00 6 месяцев назад
45

Попробуйте это также. Надеюсь, это поможет.

        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

ответил(а) 2021-01-19T17:31:55+03:00 6 месяцев назад
45

Эти ответы отражают то, что я понимаю о вашей проблеме. Похоже, что вы хотите агрегировать tbl_PODetail по номеру PO и вычислить сумму как количество. Затем вы хотите объединить вторую таблицу 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'

ответил(а) 2021-01-19T17:31:55+03:00 6 месяцев назад
45

Попробуйте агрегировать значения в подзапросах и присоединить их впоследствии


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'

ответил(а) 2021-01-19T17:31:55+03:00 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема