0


0

フィールドの合計を含む3つのテーブルからのSQLレポート

私は3つのテーブルを持っています

写真のRequired Reportのようなレポートを生成するSQL文が欲しい。

6 Answer


1


借方取引の「金額」が負であれば、より簡単になります。 また、残高は「デビット-クレジット」ではなく「クレジット-デビット」です。 いかなる場合でも:

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)


1


このようなことを試すことができます:

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


0


あなたが探しているクエリは…​

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;

いくつかの観察が許可される場合があります。 1つ目は、最後の列タイトルが列の内容を反映していないように見えることです。2つ目は、テーブル名と列名の無計画な大文字化が将来大きな問題を引き起こすことです。大文字と略語の形成には一貫したスタイルを使用することをお勧めします。


0


これは動作するはずです(副選択は不要ですが、これはテストされていません):

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


0


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


0


私はこれをテストしていませんが、 `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