2016-08-30 5 views
0

오픈 오더에서 판매 수치를 코드별로 정렬해야합니다. 품목은 재고 테이블에서 로트 번호로 구분되지만 (추적 성 이유로) 주문 번호 테이블에는 로트 번호가 표시되지 않습니다. 2 개의 테이블 사이의 유일한 링크는 부품 번호입니다.신뢰할 수없는 쿼리 결과

코드 BY orders.partno = stock.partno GROUP ON INNER 재고 가입 주문 매출 AS 내 쿼리

SELECT 코드, SUM (수량 * 가격)

가 (매우 이상한 결과를 반환 시작 주어진 코드에 대한 높은 판매 수치), 나는 orders.partno = stock.partno

ON DISITNCT orders.partno, stock.lot, INNER 재고 가입 수주 stock.code 을 선택

로 변경

와는 주어진 부분의 여러 많은 재고가있는 경우 그들은 모두 의미

1 부 LotA 코드

1 부 LotB 코드

1 부 LotC 코드

을 반환하는 것으로 나타났습니다 그 고객의 경우 Part1 300 단위 주문, 내 쿼리는 900을 반환하고 판매 수치는 3을 곱합니다.

어떻게 해결할 수 있습니까?

필자는 데이터베이스에서 작동하지 않지만 테이블 그룹에서 작동한다는 것을 알아야합니다. 구조는 기발한 경우가 있습니다.

+1

불행히도 이와 같은 디자인에서는 코드별로 판매를 그룹화 할 수 없습니다. –

답변

0

쿼리를 작성할 때는 실제로 table.column 또는 alias.column 참조를 사용해야합니다. 귀하의 질문에 서 우리는 PRICE가 어떤 테이블에서 왔는지를 알지 못합니다 ... 부품 테이블 또는 로트 테이블. FIFO 또는 LIFO 방법 회계와 같은 재고 추적을 처리하는 경우, 재고 추적 및 판매를위한 로트 테이블에 대한 연관이 있어야합니다.

왜 지금 큰 숫자를 얻고 있습니까? 그것은 데카르트의 결과 때문입니다. 당신이 그것에 익숙하지 않다면, 하나의 테이블에있는 각 레코드가 다른 테이블에 합쳐 졌기 때문에 많은 일치를 반환합니다.

광고 항목이 하나 인 경우 제품 사용 가능 테이블에는 광고 항목이 하나만 있습니다. 그래서 이것은 간단한 1 : 1 비율입니다. 이제 동일한 부품 번호에 대해 여러 레코드를 가질 수있는 STOCK 테이블이 있습니다. 이제 Stock 테이블의 각 LOT 항목에 대해 동일한 원래 주문 광고 항목을 반환합니다. 이제 1 개의 아이템에 대해 3 개의 로트를 얻습니다 (1 : 3 결과).

저는 이것이 상품 판매 기준에서 중요하다는 것을 알고 있습니다. 따라서 "합법적 인"것이 무엇인지 알아야 할 필요가 있기 때문에 적절한 가격 책정을위한 하나의 특정 기록 만 얻을 수 있습니다.

그러나 판매하는 모든 제품에 대한 일반적인 제품 표가 있고 해당 표가 판매에 사용 된 "일반"일반 가격이있는 경우 보고서 대신 해당 표에 가입합니다. 그러나 여전히 재고, 비용 비용 등의 회계 문제가 있습니다.

관련 문제