如何在 SQL 中使用其他表中的数据创建小计

Posted

技术标签:

【中文标题】如何在 SQL 中使用其他表中的数据创建小计【英文标题】:How to create subtotal in SQL with data from other table 【发布时间】:2019-09-24 00:22:56 【问题描述】:

我正在尝试为不同邮政编码的销售创建小计,因为发票没有邮政编码,我需要从客户表中获取。

这是我的 sql,它将显示所有交易:

select c.name, c.zip, i.total, i.salestax from customer c, invoice i
where i.sdate >= '2019-09-01' and i.sdate <= '2019-09-30' and 
c.accountnum=i.customernr
order by c.zip

我尝试将 SUM 添加到总计和销售税中,但如果这样做,我会收到 SQL 错误。

任何帮助将不胜感激。

谢谢, 凯赫杰

【问题讨论】:

请提供示例数据、期望的结果,并学习使用正确、明确、标准 join 语法。 【参考方案1】:

这是您的查询,您可以使用sum() and group-by 获取结果

select c.name, c.zip, sum(i.total) as total, sum(i.salestax) as tax
from  invoice i
inner join customer c on c.accountnum=i.customernr
group by c.zip, c.name
where i.sdate >= '2019-09-01' and i.sdate <= '2019-09-30' 
order by c.zip

【讨论】:

【参考方案2】:

如果您希望按邮政编码汇总,那么这应该是您分组的唯一键。然后你需要聚合函数:

select c.zip, sum(i.total), sum(i.salestax)
from customer c join
     invoice i
     on c.accountnum = i.customernr
where i.sdate >= '2019-09-01' and i.sdate <= '2019-09-30' 
group by c.zip
order by c.zip

【讨论】:

谢谢,加入对我来说一直是个谜。 @KimHJ 。 . .您的问题表明您希望每个邮政编码一行。如果是这样,那么这是更正确的答案。如果您希望每个名称和邮政编码一行,那么金属更正确。

以上是关于如何在 SQL 中使用其他表中的数据创建小计的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 vba 从具有多个数据字段的 excel 数据透视表中删除小计

SQL如何使用JOIN创建小计

如何按小计创建 SQL 组?

如何在 SQL 中获取时间数据类型的小计?

SQL Server - 如何将带有组小计的列添加到查询结果中

如何使用其他表中的数据创建此视图