我有桌子:
客户(Id_Customer,名称,地址)
(1,A, Add1)
(2,B, Add2)
(3,C, Add3)
(4,D, Add4)
(5,E, Add5)
收据(客户ID,资金)
(2, 10)
(3, 20)
(2, 15)
付款(Id_Customer,资金)
(1, 30)
(2, 40)
(4, 05)
现在,我要显示如下:
Name ------- Debit balance ------ In credit
A ----------------------------------------30
B ----------------15-------------------------
C -----------------------------------------20
D -------------- 05-----------------------
Total DB: ----- 20-------------Total IC: 50
其中:
if sum(money) of Receipt < sum(money) of Payment
then Debit balance = sum(money) of Payment - sum(money) of Receipt
else
In credit = sum(money) of Receipt-sum(money) of Payment
注意,仅当借方余额或贷方不为零时显示客户。总计超过()进行分页。
我使用QUERY运行,但是仅显示在两个表中的“收款”和“付款”中也有“钱”的客户(如果客户只在“收据”中有钱,否则“付款”将不会显示在结果中,为什么?显示那个顾客?)
select a.*, Total_DebitBalance=sum(DebitBalance) over (), Total_InCredit=sum(InCredit) over () from (SELECT C.name, C.Address,
CASE WHEN SUM(isnull(R.Money, 0))< SUM(isnull(P.Money, 0)) THEN SUM(isnull(P.Money, 0)) - SUM(isnull(R.Money, 0)) END AS DebitBalance,
CASE WHEN SUM(isnull(R.Money, 0))> SUM(isnull(P.Money, 0)) THEN SUM(isnull(R.Money, 0)) - SUM(isnull(P.Money, 0)) END AS InCredit,
C.Id_Customer, COUNT(*) OVER () AS total_count
FROM Customer C LEFT JOIN Receipt R ON C.Id_Customer = R.Id_Customer LEFT JOIN Payment P ON C.Id_Customer = P.Id_Customer group by C.Id_Customer, C.name, C.Address)a ;
这是结果:
姓名-------借方余额------贷方
B ----------------15-------------------------
Total DB: ----- 15-------------Total IC: 0
答案 0 :(得分:0)
修改后的查询。 (很抱歉延迟)
以下应满足您的需求
SELECT
C.Id_Customer,
CASE
WHEN ISNULL(R.[Money], 0) - ISNULL(P.[Money], 0)> 0
THEN ISNULL(R.[Money], 0) - ISNULL(P.[Money], 0)
END AS [Debit balance],
CASE
WHEN ISNULL(P.[Money], 0) - ISNULL(R.[Money], 0) > 0
THEN ISNULL(P.[Money], 0) - ISNULL(R.[Money], 0)
END AS [In credit]
FROM
Customer C
LEFT JOIN
(SELECT SUM([Money]) AS [Money],Id_Customer FROM Receipt GROUP BY Id_Customer) R ON C.Id_Customer = R.Id_Customer
LEFT JOIN
(SELECT SUM([Money]) AS [Money],Id_Customer FROM Payment GROUP BY Id_Customer)P ON C.Id_Customer = P.Id_Customer