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

事实预算示例:

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(总和)的借方和贷方总和。

示例数据的解决方案示例:

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)然后它们在哪里相等(1.6 101 = 1.6 101)以按时间键分组并汇总借方和贷方。

要计算总和帐户 1.6 1(带空格的 5 个符号)的借方和贷方,我们需要对所有帐户进行子串化,实际上预算最多为 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 分组并汇总借方和贷方:) 等等。

那么,如何通过 TimeKey 和 AccountKey 获取 S Accounts Debit 和 Cred Sum?

4

3 回答 3

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 回答