0

DimAccounts と FactBudget の 2 つのテーブルがあります。

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

ファクトバジェットの例:

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

FactBudget には、タイプ B のアカウントが多数あります。アカウント タイプ S (Sum) の借方と貸方の合計を取得する必要があります。

サンプルデータのソリューション例:

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 -> 1.6 101、1.6 1112 -> 1.6 111、1.6 1011->1.6 101) までの factbudget のすべての口座をサブストリング化する必要があります。そして、タイムキーでグループ化し、借方と貸方を合計するために、それらはどこで等しいか(1.6 101 = 1.6 101)です。

合計口座 1.6 1 (空白を含む 5 つの記号) の借方と貸方を計算するには、actbudget のすべての口座を 5 つの記号 (1.6 1012 -> 1.6 1, 1.6 1112 -> 1.6 1, 1.6 1011->1.6 1) に部分文字列化する必要があります。そして、タイムキーでグループ化し、借方と貸方を合計するために、それらはどこで等しいか(1.6 1 = 1.6 1)などです。

では、TimeKey と AccountKey で S Accounts Debit と Cred Sum を取得する方法は?

4

3 に答える 3

1

基本的に、この回答を使用して、結合条件の 1 つを変更するだけです。

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
于 2012-04-26T07:46:26.970 に答える
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
于 2012-04-26T07:53:01.217 に答える
0

多分このようなもの:

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
于 2012-04-26T07:50:41.330 に答える