sql对两个表中的计数求和并添加金额
我正在使用最后一个sql 前两个分组给了我正确的答案,但最后一个涉及连接两个表的分组给了我一个太高的数字,当我手动将前两个加在一起时 sql将生成图1,2和(1+2)作为3 请帮忙。 下面是sqlsql对两个表中的计数求和并添加金额,sql,Sql,我正在使用最后一个sql 前两个分组给了我正确的答案,但最后一个涉及连接两个表的分组给了我一个太高的数字,当我手动将前两个加在一起时 sql将生成图1,2和(1+2)作为3 请帮忙。 下面是sql select [OrderDate] as "Date", 'Cobs' as "Payment Source", COUNT(*) as "Quantity", SUM([
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
你加入的方式
FROM cobaltins as cb
LEFT JOIN cobaltins_adhoc as cba
ON cb.OrderDate = cba.OrderDate
仅在订单日期加入。如果你每个日期有多个订单,那么它会尝试将这些订单任意地连接在一起。您需要在该加入中添加其他内容以使其与众不同。您是在OrderDate加入的 这意味着,如果两个表中有多个具有相同订单日期的行,那么您将获得另一个表中匹配行的重复
测试这一点的一种快速方法是删除COUNT(*)和GROUP BY,只需查看加入的结果。您是否看到任何不想计数的重复项?为什么不使用列而不是行来执行此操作
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";
你可能想尝试对你的工会的内联视图求和,而不是尝试将其加入其中
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"
我突然想到的一件事是下面的左连接。我不太确定这些表是什么,但它是否会保留太多的值,并通过计算两次来扭曲结果?也许内部联接更合适?您使用的是什么数据库?这两个表没有其他共同点..我只想得到每个表和计数所赚的2元钱的总和..在这种情况下,我建议使用Conrad Frix的上述答案,它将这两个作为子查询,然后聚合它们的值。因为这将允许您仅获取所需的单个值,而不是使用join重复值。