Вопрос по sql-server-2008, sql-server, sql – Как суммировать счета по длине кода счета?

0

У меня есть 2 таблицы: DimAccounts и FactBudget.

Пример DimAccounts:

<code>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
</code>

Пример FactBudget:

<code>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
</code>

В FactBudget есть много Счетов только с типом B. Мне нужно получить Дебетовую и Кредитную суммы для Счета типа S (Сумма).

Пример решения для примера данных:

<code>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
</code>

Чтобы вычислить дебет и кредит для суммы счета 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) сгруппировать по временным ключам и сумме дебетовых и кредитных :) и так далее.

Итак, как получить дебетовые и кредитные суммы S-счетов по TimeKey и AccountKey?

Ваш Ответ

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
Error: User Rate Limit Exceeded 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
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

Похожие вопросы