Sql для подсчета сумм и добавления сумм из 2 таблиц

Я получаю последний sql для работы.

Первые две группы дали мне правильный ответ, но последний, который включает объединение двух таблиц, дал мне слишком высокий номер, когда я вручную добавлял первые два вместе.

sql - генерировать цифры 1,2 и (1 + 2) как 3.

Помощь Pls. sql ниже....

select [OrderDate] as "Date", 'Cobs' as "Payment Source", COUNT(*) as "Quantity", SUM([Amount]) as "Value in Pounds"
from cobaltins
where PN like 'BT%'
group by OrderDate
union all
select [OrderDate] as "Date", 'Cobs Adhoc' as "Payment Source", COUNT(*) as "Quantity", SUM([Amount]) as "Value in Pounds"
FROM cobaltins_adhoc
where name = 'Vauz'
group by OrderDate
union all
select cba.OrderDate as "Date", 'Cumulative' as "Payment Source", COUNT(*) as "Quantity", sum((cb.Amount)+(cba.Amount)) as "Value in Pounds"
FROM cobaltins as cb
left join cobaltins_adhoc as cba on cb.OrderDate = cba.OrderDate
where cb.PN like 'BT%' or cba.name = 'Vauz'
group by cba.OrderDate
4 ответа

Вместо того, чтобы попробовать и получить его в одном, вы можете попытаться суммировать встроенный просмотр вашего UNION

SELECT "Date", "Payment Source", SUM(Quantity) Quantity, SUM("Value in Pounds") "Value in Pounds" FROM
( select [OrderDate] as "Date", 'Cobs' as "Payment Source", COUNT(*) as "Quantity", SUM([Amount]) as "Value in Pounds" from cobaltins where PN like 'BT%' group by OrderDate union all select [OrderDate] as "Date", ' Cobs Adhoc' as "Payment Source",COUNT(*) as "Quantity", SUM([Amount]) as "Value in Pounds" FROM cobaltins_adhoc where name = 'Vauz' group by OrderDate
) t
GROUP BY "Date", "Payment Source"


Вы присоединяетесь к OrderDate.

Это означает, что если в одной таблице указано более одной строки с одинаковой датой заказа, тогда вы получите дублирование совпадающих строк в другой таблице.

Быстрый способ проверить это - удалить COUNT (*) и GROUP BY, и просто посмотреть на результат вашего соединения. Вы видите дубликаты, которые вы не хотели считать?


То, как вы делаете свое соединение

FROM cobaltins as cb
LEFT JOIN cobaltins_adhoc as cba
ON cb.OrderDate = cba.OrderDate

присоединяется только к дате заказа. если у вас несколько заказов на дату, тогда он попытается объединить их вместе произвольно. вам нужно добавить что-то еще в это соединение, чтобы сделать его отличным.


Почему бы не сделать это со столбцами вместо строк?

select bt."Date", bt.Quantity as Cobs, vauz.Quantity as CobsAdhoc, (bt.quantity + coalesce(vauz.Quantity)) as Total
from (select [OrderDate] as "Date", 'Cobs' as "Payment Source", COUNT(*) as "Quantity", SUM([Amount]) as "Value in Pounds" from cobaltins where PN like 'BT%' group by OrderDate ) bt left outer join (select [OrderDate] as "Date", 'Cobs Adhoc' as "Payment Source",COUNT(*) as "Quantity", SUM([Amount]) as "Value in Pounds" FROM cobaltins_adhoc where name = 'Vauz' group by OrderDate ) vauz on bt."Date" = vauz."Date";

licensed under cc by-sa 3.0 with attribution.