报表名称:客户月度应收查询 逻辑: 1、查询统计审核、入账状态(StateFlag)的出货/退货单 2、按照发货日期(DeliveryDate)筛选汇总月份 3、本期货款=sum(SaleOutRtnFlag*ActualAmount) 4、本期退货=sum(SaleOutRtnFlag*ActualAmount) 5、本期欠款=本期货款+本期退货-本期认领(tAccReceiptCheckDetail) 查询模板:年份 报表显示: 客户编号、客户明细、(1-12月)欠款、(1-12月)退款、(1-12月)货款
时间: 2023-07-10 21:24:42 浏览: 52
根据您提供的逻辑,可以使用以下SQL语句实现客户月度应收查询报表:
```
SELECT
CustomerCode,
CustomerName,
SUM(CASE WHEN MONTH(DeliveryDate) = 1 THEN SaleOutRtnFlag * ActualAmount ELSE 0 END) AS JanAmt, -- 1月欠款
SUM(CASE WHEN MONTH(DeliveryDate) = 2 THEN SaleOutRtnFlag * ActualAmount ELSE 0 END) AS FebAmt, -- 2月欠款
SUM(CASE WHEN MONTH(DeliveryDate) = 3 THEN SaleOutRtnFlag * ActualAmount ELSE 0 END) AS MarAmt, -- 3月欠款
SUM(CASE WHEN MONTH(DeliveryDate) = 4 THEN SaleOutRtnFlag * ActualAmount ELSE 0 END) AS AprAmt, -- 4月欠款
SUM(CASE WHEN MONTH(DeliveryDate) = 5 THEN SaleOutRtnFlag * ActualAmount ELSE 0 END) AS MayAmt, -- 5月欠款
SUM(CASE WHEN MONTH(DeliveryDate) = 6 THEN SaleOutRtnFlag * ActualAmount ELSE 0 END) AS JunAmt, -- 6月欠款
SUM(CASE WHEN MONTH(DeliveryDate) = 7 THEN SaleOutRtnFlag * ActualAmount ELSE 0 END) AS JulAmt, -- 7月欠款
SUM(CASE WHEN MONTH(DeliveryDate) = 8 THEN SaleOutRtnFlag * ActualAmount ELSE 0 END) AS AugAmt, -- 8月欠款
SUM(CASE WHEN MONTH(DeliveryDate) = 9 THEN SaleOutRtnFlag * ActualAmount ELSE 0 END) AS SepAmt, -- 9月欠款
SUM(CASE WHEN MONTH(DeliveryDate) = 10 THEN SaleOutRtnFlag * ActualAmount ELSE 0 END) AS OctAmt, -- 10月欠款
SUM(CASE WHEN MONTH(DeliveryDate) = 11 THEN SaleOutRtnFlag * ActualAmount ELSE 0 END) AS NovAmt, -- 11月欠款
SUM(CASE WHEN MONTH(DeliveryDate) = 12 THEN SaleOutRtnFlag * ActualAmount ELSE 0 END) AS DecAmt, -- 12月欠款
SUM(CASE WHEN SaleOutRtnFlag = 1 THEN ActualAmount ELSE 0 END) AS SaleAmt, -- 本期货款
SUM(CASE WHEN SaleOutRtnFlag = -1 THEN ActualAmount ELSE 0 END) AS RtnAmt, -- 本期退款
SUM(SaleOutRtnFlag * ActualAmount) - COALESCE(SUM(ClaimAmount), 0) AS TotalAmt -- 本期欠款
FROM
SaleOutRtn
JOIN Customer ON SaleOutRtn.CustomerID = Customer.CustomerID
LEFT JOIN tAccReceiptCheckDetail ON SaleOutRtn.SaleOutRtnID = tAccReceiptCheckDetail.SaleOutRtnID
WHERE
StateFlag = 2 -- 审核、入账状态
AND YEAR(DeliveryDate) = @Year -- 按年份筛选
GROUP BY
CustomerCode,
CustomerName
```
在这里,我们使用了SUM函数和CASE表达式计算每个客户在每个月份的欠款、退款和货款,并使用GROUP BY子句按客户编号和客户明细分组。同时,我们使用COALESCE函数将NULL值替换为0,确保计算本期欠款时不会出现NULL值。最后,使用WHERE子句按照审核、入账状态和年份进行筛选。