2012-04-26 6 views
0

私は2つのテーブルDimAccountsとFactBudgetを持っています。アカウントコードの長さでアカウントを合計するには?

DimAccounts例:

AccountKey AccountCode  AccountName AccountGroup AccountType 
1.6 1   6 1    NN   6    S 
1.6 10  6 10    MMM   6    S 
1.6 101  6 101    TTT   6    S 
1.6 1010  6 1010   IIII  6    B 
1.6 1011  6 1011   OOOO  6    B 
1.6 1012  6 1012   KKK   6    B 

FactBudget例:FactBudgetで

TimeKey AccountKey Debit Credit 
20110719 1.6 1010 20.00 5.00 
20110719 1.6 1011 15.00 0.00 
20110719 1.6 1000 5.00 0.00 
20110719 1.6 1012 10.00 5.00 
20110719 1.6 1112 10.00 0.00 

はちょうど私がアカウントの種類S(合計)のための借方と貸方合計を取得する必要がありますタイプBと多くのアカウントです。例えば、データの

ソリューション例:合計のための借方と貸方を計算するのに

TimeKey AccountKey Debit Credit 
20110719 1.6 1  60.00 10.00 
20110719 1.6 10 50.00 10.00 
20110719 1.6 101 45.00 10.00 

1.6 101(空白で7シンボル)を考慮し、我々は7つのシンボル(1.6 1012年までfactbudget内のすべてのacountsをサブストリングする必要があります - > 1.6 101、1.6 1112 - > 1.6 111、1.6 1011 - > 1.6 101)、次に、タイムキーと借方と借方でグループ化するためには (1.6 101 = 1.6 101)と等しい。

合計口座の借方と貸方を計算するには、実際の予算ですべての口座を部分記号にする必要があります(1.6 1012 - > 1.6 1、1.6 1112 - > 1.6 1、1.6 1011-> > 1.6 1)、そしてそれでは、それらは、タイムキーと借方と借方でグループ化するために、 (1.6 1 = 1.6 1)と等しくなります。

Sアカウントの借方とクレジットの合計をTimeKeyとAccountKeyで取得する方法は?このようなものかもしれない

SELECT 
    f.TimeKey, 
    s.AccountKey, 
    SUM(f.Debit) AS Debit, 
    SUM(f.Credit) AS Credit 
FROM DimAccounts s 
    INNER JOIN DimAccounts b ON b.AccountCode LIKE s.AccountCode + '%' 
    /* alternatively: ON s.AccountCode = LEFT(b.AccountCode, LEN(s.AccountCode)) */ 
    INNER JOIN FactBudget f ON f.AccountKey = b.AccountKey 
WHERE s.AccountType = 'S' 
    AND b.AccountType = 'B' 
GROUP BY 
    f.TimeKey, 
    s.AccountKey 

答えて

1

基本的に、あなたはthis answerを取ることができるだけの参加条件の1つを変更

SELECT 
    FactBudget.TimeKey, 
    DimAccounts.AccountKey, 
    SUM(FactBudget.Debit) AS Debit, 
    SUM(FactBudget.Credit) AS Credit 
FROM 
    DimAccounts 
    JOIN FactBudget 
     ON DimAccounts.AccountKey= 
      SUBSTRING(FactBudget.AccountKey,0,DATALENGTH(DimAccounts.AccountKey)+1) 
WHERE 
    DimAccounts.AccountType='S' 
GROUP BY 
    FactBudget.TimeKey, 
    DimAccounts.AccountKey 
+0

を作品は完全にあなたに感謝します – Justin

1
SELECT  F.TimeKey, 
      D.AccountKey, 
      SUM(F.Debit) Debit, 
      SUM(F.Credit) Credit 
FROM  DimAccounts D 
INNER JOIN FactBudget F ON F.AccountKey LIKE D.AccountKey + '%' 
WHERE  D.AccountType = 'S' 
GROUP BY F.TimeKey, 
      D.AccountKey 
関連する問題