안녕하세요.. 최근에 이직했는데 여기서 MSSQL을 쓰는데 제가 MSSQL은 완전 초보입문자 수준이라
염치불구하고 도움을 요청하게 되었습니다...
일단 제가 원하는 결과물은
----------------------------------------------------------------------
발주처 ㅣ 발주수량 ㅣ 입고요청건수 ㅣ 납기준수 ㅣ 지연건수 ㅣ
----------------------------------------------------------------------
회사 1 10개 10개 5개 5개
----------------------------------------------------------------------
회사 1 5개 2개 2개 3개
----------------------------------------------------------------------
회사 2 50개 50개 49개 1개
와 같이 나타내는것입니다.
제가 원하는 결과값은 예를들어 발주일자를 2016년 08월로 검색하면 발주처와 8월에 발주나간 발주수량과
입고들어온 입고수량(입고요청건수라 지칭), 납기준수(약속한 납기일자 안에 들어온것) 과
지연건수(발주수량 - 납기준수 = 지연건수) 입니다
발주뷰: OPOHV (캡쳐사진첨부)
입고뷰: OIOHV (캡쳐사진첨부)
발주처: CUSTNO
발주수량:QTY
입고요청건수:QTY
납기준수:
지연건수:
발주일자: PODATE
납기일자: DUEDATE
입고일자: IODATE
입니다......
부장님께서 힌트를 주셨는데
거래처와 발주수량은 OPOHV(발주뷰)에서 집계하고
입고량은 OIOHV에서 구할수 있고
이 둘의 연결고리는 발주번호(SLIPNO)와 순번(SLIPSEQ)이다
납기준수와 지연건수를 구할때는 납기일자>=입고일자 (납기준수) / 하고 여기서 ISNULL을 써서 NULL값은 0으로..
납기일자 < 입고일자 (지연건수) / 하고 여기서 ISNULL을 써서 NULL값은 0으로..
하면되는데 CASE문을 사용해서 하면 된다고 하셨고
이렇게 하면 예를들어 발주가 10건 나가고 입고가 5개 들어오고 몇일뒤에 5개가 들어왔다고 치면
------------------------
발주량 입고량 납기준수 지연건수
------------------------
10 5 5 0
10 5 5 0
이렇게 되면 SUM했을때 입고량과 납기준수랑 지연건수는 맞는데 발주량이 2배가 된다고
UNUON ALL을 써라고 하시는데 그것도 난생 처음들어보는....
그다음에는 인라인뷰를 써서 발주는 별도로 만들고 입고자료를 발주에 LEFT JOIN 시키면 된다고 하시네요.....
머리로 이해는 했는데 실제로 쿼리를 작성하려니 도저히 모르겠네요...
이직해서 첫번째로 하는 개인작업인데 아주 쉬운 쿼리라고 하는데 해결못할까봐 겁납니다..
도움부탁드립니다...ㅠㅠ
Comment 2
-
항해자™
2016.09.28 12:52
-
항해자™
2016.09.28 13:10
첨부 이미지 보고 대충 작성해 봅니다.
drop table #tmpA drop table #tmpB go create table #tmpA ( 고객번호 int , 발주량 int , 발주일자 smalldatetime ) create table #tmpB ( 고객번호 int , 입고량 int , 발주일자 smalldatetime , 입고일자 smalldatetime ) go insert into #tmpA values (1,10,'2016-09-28') insert into #tmpB values (1,5,'2016-09-28','2016-09-28') ,(1,5,'2016-09-28','2016-09-29') go select convert(char(10),발주일자,121) as 발주일자 , 고객번호 , case when cRows = 1 then 발주량 when 지연건수 = 0 then 0 when 발주량 <= 지연건수 then 발주량 - 지연건수 else 발주량 end as 발주량 , 입고량 , 지연건수 from #tmpA as a outer apply ( select row_number() over(order by (select 1)) as cRows , 입고량 , 지연건수 from #tmpB as x cross apply ( select a.발주량 - sum(입고량) as 지연건수 from #tmpB as x2 where x2.고객번호 = a.고객번호 and x2.발주일자 = a.발주일자 and x2.입고일자 <= x.입고일자 ) as y where x.고객번호 = a.고객번호 and x.발주일자 = a.발주일자 ) as b go
테이블 스키마 좀 알려주세요~
그리고, 마지막 결과값은, 아래와 같아야 하지 않나요?