Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何按帐户代码长度计算帐户总数?_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

Sql 如何按帐户代码长度计算帐户总数?

Sql 如何按帐户代码长度计算帐户总数?,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有两张表:DimAccounts和FactBudget 例如: 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

我有两张表:DimAccounts和FactBudget

例如:

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
事实上,预算是许多帐户只是与类型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 1017个符号的借方和贷方,我们需要将factbudget中的所有账户子串为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.615个符号和空格的借方和贷方,我们需要将factbudget中的所有科目子串为5个符号1.61012->1.61112->1.61111,1.61011->1.6101,1.61011->1.6101,然后它们在哪里相等 1.6 1=1.6 1按时间键和借方和贷方合计进行分组:依此类推

那么,如何通过TimeKey和AccountKey获取S帐户的借方和贷方金额呢?

基本上,您可以采用并更改其中一个联接条件:

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

也许是这样的:

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