2017-12-27 1 views
3

DSum을 사용하면 필요한 숫자를 계산할 때 천문학적 인 시간이 소요됩니다. 4300 개의 행을 가진 쿼리에서 행당 대략 0.1 초가 걸린 것으로 보입니다. 즉, 내 DB를 새로 고칠 때마다 약 8 분이 걸립니다. ...액세스 쿼리 : DSum (또는 다른 접근 방식)을 사용하지 않고 누적 합계를 계산 하시겠습니까?

나는 여기서 깊은 질문을하고 있지만, 따라하기 만하면 완전히 일치해야합니다. 즉, 두 테이블과 원하는 출력으로 A에서 B까지 얻는 방법을 알고 있다면 자유롭게 나를 도와주세요. 나는 아래에서 일하는 방법을 가지고있다. 그러나 나는 그것이 너무 길어질 뿐이라고 말했다.

아래 두 표부터 시작합니다. 제가하고 싶은 일은 필요한 QTY에서 직접 손을 뺀 다음 계속되는 초과분을 다음 날짜로 롤 포워드하는 것입니다. 그러나 필요한 QTY를 롤 포워드하지 않으려합니다. 손에

Product | QTY 
    A  | 125 

(이 예제에서는 한달에 50 필요) 필수

Product | QTY Req | Date Req 
    A  |  50 | 1-1-18 
    A  |  50 | 2-1-18 
    A  |  50 | 3-1-18 
    A  |  50 | 4-1-18 
    A  |  50 | 5-1-18 
    A  |  50 | 6-1-18 

그리고, 이쪽은 내 원하는 출력 : (이 예에서는 , 나는 3 개월 이상 QTY를 손에 쥐고 있고, 그 후에도 50 개월이 필요합니다.

Product | Build QTY | Date Req 
    A  |  0  | 1-1-18 
    A  |  0  | 2-1-18 
    A  |  25 | 3-1-18 
    A  |  50 | 4-1-18 
    A  |  50 | 5-1-18 
    A  |  50 | 6-1-18 


1 단계 :

내에서 직접 수량에 잘못된 날짜를 지정은 (수동 일자 이전으로 설정). 이것은 우리가 모든 공급/수요 수량을 통합하기위한 조합 질의를 할 수 있도록하는 것입니다. 손에서 요약

(새 쿼리)

SELECT 
    DateValue("12/1/2017") AS [Date], 
    [On Hand].[Product], 
    [On Hand].[QTY]; 

2 단계 :

그래서 우리는 모든 date↔product 콤보를 얻을 수있는 연합 쿼리를 확인합니다.

uQuery (새 쿼리)

SELECT 
    [On Hand Summary].[Date] AS [Date], 
    [On Hand Summary].[Product] AS [Product] 
    FROM [On Hand Summary] 
UNION SELECT 
    [Required].[Date Req] AS [Date], 
    [Required].[Product] AS [Product] 
    FROM [Required]; 

3 단계 :

하는 제품 & 날짜 별 수량을 통합 할 수 있습니다. 여기서 나는 손으로 QTY에 -1을 곱하여 롤 포워드 될 금액을 미리 준비 할 수 있습니다.

null 값을 0으로 바꿀 수 있도록 Iif(IsNull())에 내 QTY를 래핑합니다.

데이터 통합 ​​1 (새 쿼리)

SELECT 
    [uQuery].Date, 
    [uQuery].Product, 
    IIf(IsNull(-1*[On Hand Summary]![QTY]),0,-1*[OH Summary]![QTY]) AS [OH QTY], 
    IIf(IsNull([Required]![QTY Req]),0,[Required]![QTY Req]) AS [Req QTY], 
    [OH QTY]+[Req QTY] AS [Combined QTY] 
FROM ([uQuery] 
    LEFT JOIN [On Hand Summary] ON 
    ([uQuery].Product = [On Hand Summary].Product) AND 
    ([uQuery].Date = [On Hand Summary].Date)) 
    LEFT JOIN Forecast ON 
    ([uQuery].Product = Required.Product) AND 
    ([uQuery].Date = Required.[Date Req]); 

단계 (너무 오래 걸립니다 DSUM 추가) 4 :이 쿼리에

를, 내가 ProductDate를 당긴 Combined QTY에서 첫 번째 데이터 통합 ​​쿼리 및 Roll QTY 열을 추가합니다.

데이터 통합이 (새 쿼리)를 Roll QTY를 들어

Product | Date | Combined QTY | Roll QTY 
    A  | 12-1-17 |  -125  | -125  
    A  | 1-1-18 |  50  | -75  
    A  | 2-1-18 |  50  | -25  
    A  | 3-1-18 |  50  |  25  
    A  | 4-1-18 |  50  |  75  
    A  | 5-1-18 |  50  |  125  
    A  | 6-1-18 |  50  |  175  

, 나는이 표현 사용

롤 수량 : DSUM ("[수량]을" "데이터 통합 ​​2 "[데이터 통합 ​​1]! [제품] = '"& [제품] & "및 [데이터 연결 1]! [날짜] < = #"& [날짜] & "#")

자,이 내가 필요한 걸를 제공하지만, 내가 말했듯이 행 당 대략 0.1 초 정도 걸립니다. 4300 행에 걸쳐 (만 더 얻기 위해), 그 계산을위한 시간이 수용 할 수없는 양이다. (구현되지 않은)

5 단계

나는이 부분에 도움을 필요로하지 않는다; 나는 내가해야 할 일을 알고있다. 그러나 원하는 출력을 얻는 방법을 알고 싶다면이 부분을 포함하기를 원했습니다.

나는 전통있는 다음

최소 ([연합 수량, 최대 ([롤 수량], 0))

이 계산 마지막으로 쿼리를 만들 계획 maxmin 내가 I'll need to implement a VB module을 이해하는 기능.



편집 :

나는 나의 DB의 일부를 포맷,하지만 난 그것을 간단하게 생각합니다. 나는 "한 손으로"수량이 음수 값으로 표현되는 단 하나의 입력 테이블을 만들 수 있었다.

Product | QTY Req | Date Req 
    A  | -125 | 12-1-18 
    A  |  50 | 1-1-18 
    A  |  50 | 2-1-18 
    A  |  50 | 3-1-18 
    A  |  50 | 4-1-18 
    A  |  50 | 5-1-18 
    A  |  50 | 6-1-18 

DSUM을 사용하지 않고 앞으로 돌릴 수 있습니까? 확인

는 최종 값이 0보다 작은, 그러나 월별 금액 이하이어야한다.

+1

액세스가 좋지는 않지만 큰 질문입니다. –

+1

귀하의 질문에 대해 설명해 주셔서 감사하지만 여전히 명확한 설명을 원합니다. SQL로 이동하기 전에 laymans 용어로 원하는 것을 열어서 1 단계와 2 단계의 간단한 예제 결과를 제공 할 수 있습니까? 하나 또는 두 단계에서 원하는 결과를 얻을 수 있다는 느낌이 들었습니다. –

+0

@ErikvonAsmuth 상단에 몇 가지 추가 정보가 추가되었습니다. 그게 도움이 되니? – MrMusAddict

답변

관련 문제