DimAccounts, DimTime 및 FactBudget 테이블이 3 개 있습니다.계정 합계 방법
DimAccounts 예 :
AccountKey Accouncode AccountType AccountFrom AccountTo
1.10001 10001 S 11401 27601
1.10002 10002 S 11401 16501
1.11000 11000 S 11401 11508
1.110001 110001 B NULL NULL
1.110002 110002 B NULL NULL
1.11400 11400 S 11401 11408
DimTime 예 :
TimeKey FullDate
20020102 2002-01-02
20020103 2002-01-03
20020104 2002-01-04
FactBudget 예 : FactBudget에서
TimeKey AccountKey Debit Credit
20080523 1.110002 0.00 884.00
20080523 1.110001 0.00 4251.96
20100523 1.100002 229.40 0.00
20080523 1.100002 711.79 0.00
20090523 1.110002 0.00 711.79
20080523 1.110001 0.00 229.40
20040523 1.100002 0.00 15619.05
내가 직불를 계산해야하는 단지 형 B. 많은 계정이 있고 계정 유형이 S (합계) 인 신용 합계. AccountFrom 및 AccountTo 열은 합계를 시작할 위치 (AccountFrom)와 종료 위치 (AccountTo)에서 B 유형 계정을 표시합니다.
커서를 사용하여 솔루션을 만들었지 만, 매우 나쁜 것을 알고 있습니다. FactBudget에 데이터를 그룹화하는 것이 좋습니다 (사실 factbudget 및 행 600k에 많은 열이 있기 때문에) 솔루션 검색시 나는 그룹은 60K 행을) 떠날 때 :
SELECT [TimeKey],
[AccountKey],
SUM([Debit]),
SUM([Credit])
FROM [Interlux].[dbo].[FactBudget]
GROUP BY [TimeKey],
[AccountKey]
그래서, 어떻게 TimeKey 및 AccountKey에 의해 S 계정 차변과에 Cred 합계를 얻는 방법?를
해결 방법 예 (AccountKey 데이터 타입은 NVARCHAR이다) : 사실 예산에서
TimeKey AccountKey Debit Credit
20080523 1.10002 0.00 2500
20080523 1.11000 0.00 8000
20080524 1.10002 900 0.00
타입 S와 아무 계정도 없다 !!!! 우리는 (단지 날짜 20080523에 대한 예 1.11000)에 그것을 얻을해야합니다
select
SUM(Debit), SUM(Credit)
from FactBudget
LEFT JOIN [DimAccounts]
ON [DimAccounts].[AccountKey] = FactBudget.[AccountKey]
where CAST([DimAccounts].AccountCode AS INT) >=11401
and CAST([DimAccounts].AccountCode AS INT) <= 11508
and FactBudget.Timekey = 20080523
하지만 각 날짜별로 계정 직불 및 신용 합을 S가 필요합니다.
'AccountFrom'과'AccountTo' 란 어떤 열이 관련된가요? – RedFilter
또한 왜 'DimTime'테이블을 설명하는지, 여기서는 필요하지 않은 것 같습니다. – RedFilter
은 위의 두 테이블에 대해 위에서 제공 한 AccountKeys입니까? 예상 결과에 1.10002가 표시되지만 해당 계정은 FactBudget 데이터에 표시되지 않습니까? – Taryn