[英]SQL report from 3 tables with SUM of fields
如果amount
对借记交易为负,则会更容易。 而且,余额是credit - debit
,而不是debit - credit
。 任何状况之下:
SELECT Userid, UserName, Dep_title,
( (SELECT COALESCE(SUM(amount), 0) FROM Transctions WHERE userid = USER.userid AND tr_type = 'Credit')
- (SELECT COALESCE(SUM(amount), 0) FROM Transctions WHERE userid = USER.userid AND tr_type = 'Debit')
) AS Balance
FROM USER
JOIN Department USING (dep_id)
你可以尝试这样的事情:
SELECT
u.Userid AS Userid,
u.UserName AS UserName,
d.Dep_title AS Dep_title,
SUM(IF(t.tr_type='Credit',-1*t.amount,t.amount)) AS "Balance(Debit-Credit)"
FROM USER AS u
LEFT JOIN Departement AS d USING(dep_id)
LEFT JOIN Transactions AS t ON u.Userid=t.userid
GROUP BY u.Userid
我认为您要查询的是...
SELECT Userid,
UserName,
(SELECT Dep_title
FROM department
WHERE USER.dep_id = department.dep_id) AS Dep_title,
((SELECT (SUM(amount)
FROM Transactions
WHERE Transactions.userid = USER.Userid AND
tr_type = 'Credit') -
(SELECT (SUM(amount)
FROM Transactions
WHERE Transactions.userid = USER.Userid AND
tr_type = 'Debit')) AS "Balance(Debit-Credit)"
FROM USER;
如果可以允许我进行一些观察; 首先,您的最后一列标题似乎没有反映出该列的内容,其次,表和列名的随意大写会在将来带来很多麻烦; 我建议您使用一致的样式进行大写和缩写形式。
这应该可以工作(不需要子选择,但这未经测试):
SELECT
USER.Userid,
USER.UserName,
Department.Dep_title,
SUM(IF(Transactions.tr_type='Credit',amount,amount*(-1))) as Balance
FROM
USER,
Department,
Transactions
WHERE
USER.Userid = Transactions.userid
AND
USER.dep_id = Department.dep_id
GROUP BY
USER.Userid
Select U.UserId, U.Username, D.Dep_Title
, Coalesce(Sum( Case When T.tr_type = 'Debit' Then -1 Else 1 End * T.Amount )
,0) As [Balance (Debit-Credit)]
From Users As U
Join Department As D
On D.Dep_Id = U.Dep_Id
Left Join Transactions As T
On T.UserId = U.UserId
Group By U.UserId, U.Username, D.Dep_Title
我尚未对此进行测试,但是您应该可以使用IF
语句计算出贷方之间的差额。
SELECT u.Userid, u.UserName, d.Dep_title, t.Balance
FROM USER As u
LEFT JOIN Department AS d on u.dep_id = d.dep_id
LEFT JOIN (SELECT userid, SUM(IF(tr_type = 'Debit', amount, -1*amount)) AS Balance FROM Transactions GROUP BY userid) AS t
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.