sql-server - 如何在sql中按客户的天数计算金额
问题描述
我想从发票表中按天计算客户总数,因为我在下面的查询中使用了:我想要什么
第一个表名称:MstCustomer
第二个表名称:Job_Details
第三个表名称:发票
select distinct Cust.Cust_Name,
case when DATEDIFF(dd,INV.Bill_Submit_Date,GETDATE()) > 0 and DATEDIFF(dd,INV.Bill_Submit_Date,GETDATE()) < 31
then sum(INV.Bill_Amount) end AS '1-30 DAYS',
case when DATEDIFF(dd,INV.Bill_Submit_Date,GETDATE()) > 30 and DATEDIFF(dd,INV.Bill_Submit_Date,GETDATE()) < 46
then sum(INV.Bill_Amount) end AS '31-45 DAYS',
case when DATEDIFF(dd,Bill_Submit_Date,GETDATE()) > 45
then sum(INV.Bill_Amount) end AS 'ABOVE 45 DAYS',
Balance =sum(INV.Bill_Amount) - sum(INV.Advance_Amount)
from Invoice INV
inner join Job_Details JD on JD.Job_ID= INV.Job_ID
inner join MstCustomer cust ON cust.Cust_ID= JD.Cust_ID
group by Cust.Cust_Name,Bill_Submit_Date,Bill_Amount,Advance_Amount
解决方案
您的查询看起来已经完成了 95%,只是您的sum
功能放错了位置:
select Cust.Cust_Name
,sum(case when DATEDIFF(dd,INV.Bill_Submit_Date,GETDATE()) < 31
then INV.Bill_Amount
else 0
end
) AS [1-30 DAYS]
,sum(case when DATEDIFF(dd,INV.Bill_Submit_Date,GETDATE()) between 31 and 45
then INV.Bill_Amount
else 0
end
) AS [31-45 DAYS]
,sum(case when DATEDIFF(dd,Bill_Submit_Date,GETDATE()) > 45
then INV.Bill_Amount
else 0
end
) AS [ABOVE 45 DAY]
,sum(INV.Bill_Amount) - sum(INV.Advance_Amount) as Balance
from Invoice INV
inner join Job_Details JD
on JD.Job_ID= INV.Job_ID
inner join MstCustomer cust
on cust.Cust_ID= JD.Cust_ID
group by Cust.Cust_Name
推荐阅读
- c# - 用于 Shopify Admin API 集成速率限制问题的 c# 服务
- git - 如何终止当前正在运行的 git 进程?
- postgresql - Ansible playbook 使用 shell 命令更改用户
- keras - Keras课程学习——改变shuffle方法
- php - 如果我尝试获取不存在的密钥,PHP getallheaders() 将自动发送响应
- image - Flutter-如何获取屏幕小部件的图片?
- php - PHP-FPM + Nginx docker-compose 堆栈没有重复卷
- python - write() itertools.combinations() 将结果写入文件并避免 MemoryError
- arrays - Perl 数组处理
- javascript - React 组件不会在设置状态下更新