sql - 按客户分组并在 SQL 中计算总和并返回前 15 名
问题描述
我希望按客户分组并汇总 CuryDocBal 并在分组后返回前 15 位客户我当前的代码仅返回 15 行。例如,我希望将 Morton Salt Company 的总数相加并代表 1 行。
select top 15 a.Name ,d.CuryDocBal
from
ARDoc d
inner join
[AR_Balances] b
on d.CpnyID = b.CpnyID
inner join [SIVSYS].[dbo].[Company] c
on b.CpnyID = c.CpnyID
inner join Customer a
on d.CustId = a.Custid
--DocType = 'IN'
where
d.dueDate BETWEEN dateadd(day, -21, cast(getdate() as date)) and dateadd(day, 7, cast(getdate() as date))
and CuryDocBal <> 0
group by a.Name ,
d.CuryDocBal
order by d.CuryDocBal desc;
解决方案
你需要总和()
select top 15 a.Name, d.DueDate, sum(d.CuryDocBal) curyDocBal ,d.RefNbr, d.BatNbr,
b.CpnyID
,c.CpnyName
from
ARDoc d
inner join
[AR_Balances] b
on d.CpnyID = b.CpnyID
inner join [SIVSYS].[dbo].[Company] c
on b.CpnyID = c.CpnyID
inner join Customer a
on d.CustId = a.Custid
--DocType = 'IN'
where
d.dueDate BETWEEN dateadd(day, -21, cast(getdate() as date)) and dateadd(day, 7, cast(getdate() as date))
-- and d.dueDate < dateadd(day, 7, cast(getdate() as date))
-- (DueDate BETWEEN GETDATE() AND DATEADD(DAY, +7, GETDATE())
--or
--DueDate BETWEEN DATEADD(day,-21, GETDATE()) AND GETDATE())
and CuryDocBal <> 0
group by a.Name, d.DueDate,
d.CuryDocBal, b.CpnyID
,c.CpnyName, d.RefNbr, d.BatNbr
order by d.CuryDocBal desc;
推荐阅读
- heroku - 将相同的代码部署到 Heroku 中具有不同 Procfile 的两个应用程序
- django - 为什么 Django DateField 不接受空值?
- primefaces - Primefaces“重置失败”示例
- pandas - 有没有一种优雅的方法来选择 pandas 列中具有浮点数据类型的所有行?
- git - 无法验证 gltlab 页面的自定义子域
- php - Drupal 7,下载到本地机器后无法登录
- regex - 正则表达式:查找最后一次出现的数字对
- php - 更新模型时,Laravel VentureCraft 可修改无法在 Laravel 5.5 上运行
- r - 如何对R中涉及M和B的列的值求和
- java - java - 如何将Json作为输入传递给Java中的其余Web服务