0

テーブル「アセット」と「トランザクション」を使用して、下の 3 番目のテーブルに示されている出力を取得しようとしています。

Cmpy、Acct、AssetID でグループ化し、Sum(cost) を取得しようとしています。ただし、各コストは、合計する前にトランザクション テーブルから調整する必要があります。方法がわからない。

表: 資産

+---------+--------+---------+--------+
| | 通貨 | アカウント | 資産 ID | コスト |
+---------+--------+---------+--------+
| | 50 | 120 | 109 | 100.00 |
| | 50 | 120 | 109 | 200.00 |
| | 50 | 120 | 110 | 300.00 |
| | 50 | 120 | 110 | 20.00 |
| | 50 | 121 | 107 | 150.00 |
| | 50 | 121 | 201 | 200.00 |
+---------+--------+---------+--------+

表: 取引

+--------+---------+--------+
| | 通貨 | 資産 ID | 金額 |
+--------+---------+--------+
| | 50 | 109 | -50.00 |
| | 50 | 110 | 50.00 |
| | 50 | 110 | -20.00 |
| | 50 | 201 | -50.00 |
+--------+---------+--------+

出力

+--------+--------+--------+
| | 通貨 | アカウント | 合計 |
+--------+--------+--------+
| | 50 | 120 | 600.00 |
| | 50 | 121 | 300.00 |
+--------+--------+--------+
4

2 に答える 2

3

これはあなたに正確な答えを与えるはずです:

SELECT  a.Cpny,
        a.Acct,
        SUM(a.Cost + ISNULL(t.Adjustment, 0)) AS Total
  FROM  Assets a
    LEFT JOIN (SELECT  Cpny,
                       AssetID,
                       SUM(Amt) AS Adjustment
                 FROM  Transactions
                 GROUP BY Cpny, AssetID) t
      ON t.Cpny = a.Cpny AND t.AssetID = a.AssetID
  GROUP BY a.Cpny, a.Acct

関連する SQLFiddle here

基本的に、トランザクション テーブルの調整金額を合計し、これをメインの結果リストに結合して、各アカウントの各資産のコストと調整を合計します。

于 2013-08-09T16:21:16.853 に答える
0

との値の間の「関係」が 1 対多の場合、次のクエリを使用できます (あまり効率的ではありません)。AcctAssetID

SELECT x.Cpny,x.Acct, SUM( ISNULL(x.Total,0) + ISNULL(y.Total,0) ) AS Total
FROM 
(
    SELECT  a.Cpny,a.Acct,a.AssetID, SUM(a.Cost) AS Total
    FROM    dbo.Assets a 
    GROUP BY a.Cpny,a.Acct,a.AssetID
) x
LEFT JOIN
(
    SELECT  t.Cpny,t.AssetID, SUM(t.Cost) AS Total
    FROM    dbo.Transactions t
    GROUP BY t.Cpny,t.AssetID
) y ON x.Cpny=y.Cpny AND x.AssetID=y.AssetID
GROUP BY x.Cpny,x.Acct;
于 2013-08-09T16:12:28.647 に答える