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例: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
私はデビットを計算するのに必要なだけのタイプBで多くのアカウントであり、アカウントタイプがS(合計)のクレジット合計。列AccountFromとAccountToは、集計を開始する場所(AccountFrom)と終了場所(AccountTo)からB種類のアカウントを表示します。
私はカーソルを使って解決策を作っています....しかし、これは非常に悪いことを知っています:) FactBudgetでデータをグループ化する方法はあると思います(factbudgetと行600kに多数の列があります) TimeKeyとAccountKeyによってSアカウントデビットとクレド合計を取得するにはどのように、そう
SELECT [TimeKey],
[AccountKey],
SUM([Debit]),
SUM([Credit])
FROM [Interlux].[dbo].[FactBudget]
GROUP BY [TimeKey],
[AccountKey]
:とき、私はグループがちょうど60K行)を左?
ソリューションの例(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とはアカウントがありません!!!!
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アカウント借方と貸方の合計が必要になります。私たちは(ちょうど日付20080523たとえば1.11000)、それを取得する必要があります。
「AccountFrom」と「AccountTo」はどの列が関連していますか? – RedFilter
また、なぜあなたはテーブルDimTimeを記述していますか、ここでは必要ないようです。 – RedFilter
は、上記の両方のテーブルに対して正しいアカウントキーですか?あなたの期待される結果は1.10002と表示されますが、そのアカウントはFactBudgetデータに表示されません。 – Taryn