2012-04-26 3 views
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 

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 

은 합계 직불 및 신용을 계산하기 위해 우리가 7 개 문자 (에 factbudget까지의 모든 된 계정은 하위 문자열 필요 1.6 (101) (공백을 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)과 동일한 시간대 및 합계 직불 카드로 그룹화합니다.

sum 계정에 대한 차변 및 대변을 계산하려면 1.6 (10 공백이있는 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와 sum debit과 credit으로 그룹핑하는 것과 같습니다. :) 등등.

그래서 S 계정 계좌 이체 및 계좌 이체를 TimeKey 및 AccountKey별로 얻으려면 어떻게해야합니까?

답변

1

기본적으로, 당신은 this answer 걸릴 수 있습니다 단지 가입 조건 중 하나를 변경 :

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

작품을 완벽하게 주셔서 감사합니다 – Justin

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 
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 
관련 문제