DimAccounts、DimTime、FactBudgetの3つのテーブルがあります。
DimAccountsの例:
AccountKey Accouncode AccountType AccountFrom AccountTo
1.10001 10001 S 11401 27601
1.10002 10002 S 11401 16501
1.11000 11000 S 11401 11508
1.110001 110001 B NULL NULL
1.110002 110002 B NULL NULL
1.11400 11400 S 11401 11408
DimTimeの例:
TimeKey FullDate
20020102 2002-01-02
20020103 2002-01-03
20020104 2002-01-04
FactBudgetの例:
TimeKey AccountKey Debit Credit
20080523 1.110002 0.00 884.00
20080523 1.110001 0.00 4251.96
20100523 1.100002 229.40 0.00
20080523 1.100002 711.79 0.00
20090523 1.110002 0.00 711.79
20080523 1.110001 0.00 229.40
20040523 1.100002 0.00 15619.05
FactBudgetには、タイプBのアカウントが多数あります。アカウントタイプがS(合計)の場合、借方と貸方の合計を計算する必要があります。列AccountFromおよびAccountToは、合計を開始する場所(AccountFrom)と終了する場所(AccountTo)のBタイプのアカウントを示します。
私はカーソルを使用して解決策を作成しました....しかし、これは非常に悪いことを知っています:) FactBudgetのデータをグループ化するために(factbudgetと行600kにも多くの列があるため)、解決策を検索するとき(私がグループ化したとき)はどういうわけかそこにあると思いますわずか60k行):
SELECT [TimeKey],
[AccountKey],
SUM([Debit]),
SUM([Credit])
FROM [dbo].[FactBudget]
GROUP BY [TimeKey],
[AccountKey]
では、TimeKeyとAccountKeyでSアカウントの借方と貸方の合計を取得するにはどうすればよいですか?(AccountKeyデータ型はnvarcharです)
解決策の例:
TimeKey AccountKey Debit Credit
20080523 1.10002 0.00 2500
20080523 1.11000 0.00 8000
20080524 1.10002 900 0.00
ファクトバジェットには、タイプSのアカウントはありません!!!! 取得する必要があります(日付20080523の例1.11000):
select
SUM(Debit), SUM(Credit)
from FactBudget
LEFT JOIN [DimAccounts]
ON [DimAccounts].[AccountKey] = FactBudget.[AccountKey]
where CAST([DimAccounts].AccountCode AS INT) >=11401
and CAST([DimAccounts].AccountCode AS INT) <= 11508
and FactBudget.Timekey = 20080523
ただし、日付ごとに各Sアカウントの借方と貸方の合計が必要です。