2017-12-27 5 views
-3

과 관련된 질문이 있습니다. 그래서 명확히하기 위해, 나는 Excel 테이블을 업로드했습니다. 여기서 계산을했습니다. 기본적으로 가중치 평균 값에 관심이 있습니다. 기본적으로 계산을 수행하는 방법은 액세스에서 뛰어납니다.제품 별 가중 평균 계산

내 수식이 다음과 같이 보입니다. =SUMIFS($I:$I;$G:$G;G2;$H:$H;H2;$B:$B;B2;$C:$C;C2)/SUMIFS($F:$F;$G:$G;G2;$H:$H;H2;$B:$B;B2;$C:$C;C2) 각 그룹에 대해 각 코드 (제품)에 대한 판매 및 판매 볼륨 번호가 매월 1 년마다 올바르게 표시됩니다.

나는 Excel에서 동일한 데이터베이스를 가지고 있는데 Excel에서와 같이 수익, 월 및 연도 값이있는 모든 추가 계산 필드가 있습니다. 그러나 나는 엑셀 공식을 재현하는 방법을 알아야한다.

그림의 제품 당 가중치는 위에 언급 한 공식을 포함합니다. 데이터가 동일한 액세스에이 계산을 포함시키는 방법을 찾아야합니다.

Code Group  Price per t Volume MONTH YEAR Revenue   Weighted 
13753 avangard 12 818,84 108,85 1  2008 1 395 330,73 13 826,51 
13755 super  11 488,83 26,76 1  2008 307 441,09  15 726,96 
14899 super  11 607,86 64,39 1  2008 747 430,11  15 591,86 
13747 super  11 892,57 62,96 1  2008 748 756,21  16 199,30 
13753 avangard 18 134,69 94,65 1  2008 1 716 448,41 13 826,51 

이 계산되어야하는지 = SUMIFS (수익; CriteriaRange (1) = 달, 기준 (1) = 행 2 (월) CriteriaRange (2) = 해, 기준 (2) = 행 2 (해) ; CriteriaRange (1) = Month (1) = Row2 (Month); CriteriaRange (2) = Year; Criteria (3) = CriteriaRange (2)

표 샘플에서 계산 된 가중치와 분리 된 경우, 제공된 데이터에만 근거하여 item에 대한 가중치가있는 가격 (예 : 13753 = (1 395 330,73 + 1 716 448,41)/(108,85 + 94,65) = 15 291,30

@Darren Bartr 쿡. 내가 필요한 해결책을 찾았습니다. 도와 주셔서 대단히 감사합니다. 이것은 SUMIFS 함수를 미러링하는 데 사용한 최종 SQL 코드입니다. 당신의 예제 테이블로 설정 테이블 (죄송합니다, 사진을 볼 수 없습니다) 및 테이블 이름으로

SELECT Data.Code, 
      Справочник_групп_продукции.Group, 
      Month([Dated]) AS LMonth, 
      Year([Dated]) AS LYear, 
      SUM([Price per t] * [Volume])/SUM([Volume]) AS Wght_Avg 
FROM Справочник_групп_продукции INNER JOIN Data ON Справочник_групп_продукции.[Code] = Data.[Code] 
GROUP BY Data.Code, 
        Month([Dated]), 
        Year([Dated]), 
        Справочник_групп_продукции.Group; 

https://imgur.com/DyMYnEC

+1

과 소리 당신이 쿼리에 도움이 필요해. 그렇다면 예상 출력과 함께 샘플 입력 데이터를 표 형식으로 표시해야합니다. –

+0

필자는 액세스 권한이있는 파일과 첨부 된 파일을 모두 첨부하고 엑셀 테이블의 가장 오른쪽에있는 열 (가중치)에 예상되는 결과를 함께 표시합니다. 액세스 수식이나 쿼리를 통해 어떻게해야하는지 잘 모르겠습니다. 나는 접근 할 멍청 아. – Andrey

+0

가능한 한 파일을 공유하지 말아야합니다. 특히 지연이 발생하고 광고를 표시하는 그늘진 파일 공유 서비스를 사용할 때 특히 그렇습니다. [Microsoft Access에서 테이블을 공유하는 방법] (https://meta.stackoverflow.com/questions/359195/share-a-table-on-stack-overflow-for-easy-import-into-ms-access)을 참조하십시오.). 이것은 전문적이고 열성적인 프로그래머를위한 사이트입니다. 게시하는 주제에 대한 프로그래밍 지식이 필요합니다. –

답변

1

그냥 합을 수행 할 필요가 MyTable로 (수익/볼륨) 및 코드, 월 및 연도별로 그룹화하십시오.

SELECT  Code 
      , Group 
      , lMonth 
      , lYear 
      , ROUND(SUM(Revenue)/SUM(Volume),2) AS Weighted_Avg 
FROM  MyTable 
GROUP BY Code 
      , Group 
      , lMonth 
      , lYear 

NB : 나는 예약어 충돌을 방지하기 위해 lMonthlYearMonthYear 필드의 이름을 업데이트했습니다.
아마도 월 및 연도 수가 아닌 실제 날짜를 사용하도록 디자인을 변경했을 것입니다.

NB 2 : 나는 또한 테이블의 기본 키Code를 사용하여 다른 테이블에 Group를 이동하고 기본 테이블에 외래 키 것입니다. 이렇게하면 그룹 이름의 오타가 제거됩니다.

SELECT  MyTable.Code 
      , Group 
      , lMonth 
      , lYear 
      , ROUND(SUM(Revenue)/SUM(Volume),2) AS Weighted_Avg 
FROM  MyTable LEFT JOIN GroupTable ON MyTable.Code = GroupTable.Code 
GROUP BY MyTable.Code 
      , Group 
      , lMonth 
      , lYear 

편집

:

는 SQL을 보면이 업데이트 된 SQL 작동합니다 게시 한 :
새로운 쿼리는 것 당신은 액세스 태그

SELECT  Format(Dated,"mmm-yyyy") AS Month_Year 
      , Group 
      , Data.Code 
      , [Price per t]*volume AS Revenue 
      , ROUND(SUM([Price per t]*[Volume])/SUM(Volume),2) AS Weighted_Avg 
FROM  Справочник_групп_продукции INNER JOIN Data ON Справочник_групп_продукции.Code = Data.Code 
GROUP BY Format(Dated,"mmm-yyyy") 
      , Group 
      , Data.Code 
      , [Price per t]*volume 
+0

답변 해 주셔서 감사합니다. 비록 pls 몇 가지 설명을 제공 할 수 있습니다. 날짜를 기준으로 월/연도 계산을 처리하는 방법은 무엇입니까 (내 테이블에서 날짜가 기입 된 필드)? 나는 날짜가있다. 또한 pls을 설명해 주시겠습니까? 다른 테이블의 그룹을 조회 할 때 쿼리를 사용하기 때문에 어떻게 코드를 내 쿼리에 적용 할 수 있습니까? 나는 다음과 같은 코드를 가지고 있지만 에러를 리턴한다. 코드로 주요 게시물을 업데이트했습니다. – Andrey

+0

가중 평균에서 오류가 발생했다고 생각합니다. 귀하의 수익은'[Price per t] * [Volume] AS Revenue'로 계산됩니다. 귀하는 가중 평균 계산에서 이것을 '수익'이라고 부를 수 없습니다. ROUND (SUM ([Price per t] * [Volume])/SUM (Volume), 2) AS Weighted_Avg'를 사용하십시오. 귀하의 날짜는'Format (dDate, "mmm-yyyy") AS Month_Year'와 함께 표시 될 수 있습니다 - 이것을 그룹화 할 필요가 있습니다. 그런 다음 'WHERE dDate BETWEEN # 2008/01/01 # AND # 2008/02/01 # -1'을 사용하여 2008 년 1 월로 제한 할 수 있습니다. –

+0

또한 검색어에'Price per t '또는'volume '을 표시 할 수 없습니다 코드가 변경 될 때 - 그룹화하지 않을 코드 13753의 경우 12 818,84 및 18 134,69입니다. 또한 SQL에서는 FROM 절의 마지막에 세미콜론 (';')이 있습니다. 사용하는 경우 쿼리의 끝 부분에 있어야합니다. –