max를 적용했는데 적용컬럼이 대체 왜 결과값이 여러개가 나오는지 모르겠습니다.ㅠ 0 11 1,971

by 2ster [SQL Query] [2019.10.22 11:57:37]


SELECT A.CD_ITEM AS 품목, B.NM_ITEM AS 품목명, B.STND_ITEM AS 규격, A.UM_INV AS 평가단가, MAX(A.YM_STANDARD) AS 재고평가월
 FROM MM_AMINVL AS A INNER JOIN (SELECT * FROM MA_ITEM WHERE DT_VALID >= '29991231') AS B ON A.CD_ITEM = B.CD_ITEM
 WHERE A.YM_STANDARD BETWEEN @S_MONTH AND @E_MONTH
 GROUP BY A.CD_ITEM, B.NM_ITEM, B.STND_ITEM, A.UM_INV
 ORDER BY A.CD_ITEM DESC

아이템, 이름, 스펙 이 모두 같고 // 단가와 적용일이 여러개로 납니다..

품목 품목명 규격 평가단가 재고평가월
AA100 모니터 에이 5050 201909
AA100 모니터 에이 0 201908
BB200 본체 0 201908
BB200 본체 4550 201909
by 우리집아찌 [2019.10.22 13:11:59]

dbms 이름과 버전도 같이 올려주셔야 답변자가 편합니다.

일단 원하시는 전체 대이터의 재고평가일의 max를 원하시는가요?

각 그룹핑 컬럼의 재고평가일릐 max값를 원하시아요?


by 2ster [2019.10.22 13:15:19]

전체데이터입니다. SQL쿼리입니다.ssms


by jkson [2019.10.22 13:12:42]

group by A.CD_ITEM, B.NM_ITEM, B.STND_ITEM, A.UM_INV 했으니 그 단위로 묶인 거 아닌가요? 평가단가가 다르니까요.


by 2ster [2019.10.22 13:16:02]

그럼 어떻게 해결을 해야할까요...예를 하나 보면 알것같은데 찾다가 오전 시간 다보냈습니다..


by jkson [2019.10.22 13:25:26]

두 개가 나오는 품목으로 해당 기간 조회해보면 단가가 2개 나올 거예요.

기준연월을 FROM ~ TO로 조회했기 때문에 단가는 2개일 수 있지요.

예를 들어 AA100 모니터의 경우 8월에는 단가가 0원이었다가 9월에는 5050원이 되었어요.

그런데 조회기간은 8월~9월로 하면 단가는 2개 있으니 단가별로 조회하면 2줄로 나올 거고요.

마스터 테이블로 보이는 MA_ITEM을 조회할 때도 DT_VALID가 29991231 이상인 데이터를 조회하는데 

이 부분도 확인 필요하겠네요.

예를들어 8월까지 DT_VALID가 29991231이었다가 9월에 DT_VALID값이 201908로 마스터 종료되었다면

8월 데이터는 조회결과로 나오지 않겠네요.

원하시는 쿼리가 어떤 건가요?


by 2ster [2019.10.22 14:05:25]

최근 단가정보를 가져오려 하고 있습니다...

MAX와 GROUP BY는 이해한 것 같습니다.

한컬럼에 대해서 최대 값이 되어야하는데 구하려는게 단가가 타겟이아니고 년도가 되니 결과가 이상하게 나오는게 맞는것 같습니다...

단가가 존재하는 것중에 최근 값들에 임시 컬럼을 부여하는 방법으로 해봐야겠습니다..


by jkson [2019.10.22 14:35:38]

각 테이블이 어떤 컬럼이 있고 각 컬럼은 어떤 의미인지 알아야 답변을 드릴 것 같은데요.

그냥 안 됩니다라고만 하시면 답변을 드릴 수가 없습니다.

여기서 테이블 데이터, 설계를 아시는 분은 2ster님밖에 없어요.

최근 ym_standard 컬럼 기준으로 최근 단가라면 굳이 임시 컬럼을 추가하지 않아도 됩니다.


by 2ster [2019.10.22 14:42:22]

개인자료가 아니다보니..

알려주신 답변들을 참고삼아서 해보겠습니다..

도움주셔서 감사드립니다


by jkson [2019.10.22 14:55:54]
SELECT 코드, 기준일, 단가
  FROM 테이블
 WHERE (코드, 기준일)         IN (
                                 SELECT 코드, MAX(기준일)
                                   FROM 테이블
                                  WHERE 기준일 BETWEEN @S_MONTH AND @E_MONTH
                                  GROUP BY 코드
                                 )

DBMS가 뭔지 모르겠어서 윈도우함수는 못 쓰겠고.. 대략 이런 기준으로 조회하시려는 것 아닌가요?


by 2ster [2019.10.22 15:26:58]

네, 맞습니다. 유사하게 해결 하여 감사인사 드리려고 했는데 그사이에 답변을 주셨었네요ㅎㅎ

감사합니다. 덕분에 WHERE에 서브쿼리를 어떻게 써야하는지도 추가로 잘 이해할수있었습니다.

쿼리내용중 테이블 정보부분은 지워주시면 감사드리겠습니다...실수로 안지우고 질문올렸었네요...


by 우리집아찌 [2019.10.22 13:24:14]

max(재고평가월) over()

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입