inner 쿼리 내 조회 조건 문의 0 5 2,487

by tae [SQL Query] [2018.10.30 18:25:38]


이미지 2.jpg (224,836Bytes)


안녕하세요?

하기 inner 쿼리 조회 조건 중에 바깥에 table 컬럼값(shipment) 를 넣고 싶은데
방법이 있을지 문의드립니다.

현재로는 아래와 같이 쿼리하면 바인딩 에러가 뜹니다.
(여러 부분으로 구성된 식별자 "SLL.Shipment Date"은(는) 바인딩할 수 없습니다.)

select
SLL.No_ as ITEM,
SLL.[Shipment Date],
sum(SALES_QTY)

from  SHH
	inner join SLL on SHH.No_ = SLL.[Document No_]  

	LEFT OUTER JOIN (
		SELECT 
			SL.No_ as ITEM,
			SUM(SL.[Outstanding Quantity]) AS SALES_QTY
		FROM SH WITH(NOLOCK) 
				LEFT OUTER JOIN  SL WITH(NOLOCK) 
					ON SH.[Document Type] = SL.[Document Type] AND SH.[No_] = SL.[Document No_] 
		WHERE SH.[Document Type] = 1 AND SL.[Location Code] <> 'DROPSHIP' AND SL.[Type] = 2 
			  and sl.[Shipment Date] <= SLL.[Shipment Date] <- 이 부분 추가 하고자 함 
		GROUP BY SL.No_
	) SALES ON SALES.ITEM = SLL.No_ 
group by SLL.No_, SLL.[Shipment Date]

 

by 마농 [2018.10.31 07:51:29]

오라클 12C 에서는 cross apply 구문을 지원합니다.
그런데 MSSQL 인 듯 합니다.
조인으로 풀어 내던가 스칼라서브쿼리로 풀어내던가 해야 할 듯 합니다.
각 테이블의 키와 관계를 알려주세요.


by tae [2018.10.31 11:59:12]

left join 한 서브 쿼리는 Sales Line (SL테이블)의 품목당 전체 outstanding 수량을 더한 컬럼이고 다만 shipment조건을 main쿼리에서 추출해서 조건을 걸어주길 원합니다.

왜냐면 최종 원하는 목표는 main select절에서  Sales Line 전체 품목의 Sales_QTY을 보여주되

내부적으로는 각각 오더의 품목별로 shipment date이 다르므로

각 오더별 최초 일자부터 shipment date 까지의 누적합을  품목별 sum으로 main select에서 보여주기를 원합니다. (결과값 샘플 첨부)

 

SL의 키는 [Document Type] 과 [Document No_] (오더번호)와 No_(품목코드) 입니다.

동일한 SL테이블이 서로 조인되어야 할거 같습니다.

 

기 쿼리에서 shipment group by는 빼고 다시 올립니다.

select
SLL.No_ as ITEM,
sum(SALES_QTY)
 
from  SHH
    inner join SLL on SHH.No_ = SLL.[Document No_]  
 
    LEFT OUTER JOIN (
        SELECT
            SL.No_ as ITEM,
            SUM(SL.[Outstanding Quantity]) AS SALES_QTY
        FROM SH WITH(NOLOCK) 
                LEFT OUTER JOIN  SL WITH(NOLOCK) 
                    ON SH.[Document Type] = SL.[Document Type] AND SH.[No_] = SL.[Document No_] 
        WHERE SH.[Document Type] = 1 AND SL.[Location Code] <> 'DROPSHIP' AND SL.[Type] = 2 
              and sl.[Shipment Date] <= SLL.[Shipment Date] <- 이 부분 추가 하고자 함 
        GROUP BY SL.No_
    ) SALES ON SALES.ITEM = SLL.No_ 
group by SLL.No_
 

 


by 마농 [2018.10.31 12:36:59]

글쎄요?
본인만 아는 용어로 설명하지 마시고
상대방이 이해 할 수 있도록 쉽게 설명해 주세요.
이미지를 추가했으나? 이게 뭘 의도한건지 알 수가 없네요?
쿼리는 너무 축약해 놔서 그런건지 의미를 알기 어렵고
SL 과 SLL 과 같이 알리아스만 남겨놔서 테이블이 뭔지 알기 힘드네요?
SL 과 SLL 이 같은 테이블은 아닌지? 의심도 들고
입장을 바꿔 놓고 본인이 작성한 질문글을 천천히 읽어보시고
이게 과연 이 글을 처음 보는 사람이 이해 할 수 있는 질문인지? 곰곰히 생각해 보세요.
질문이 잘 이해가 안가서 핵삼 단어들만 보면
아마도 누적합을 원하는 것 같은데요?
누적합은 셀프조인 없이 그냥 분석함수로 구하면 됩니다.


by tae [2018.10.31 13:07:00]

잘알겠습니다.  최대한 자세히 설명했다고 생각했는데 부족했나 봅니다.

답글 감사합니다.


by 마농 [2018.10.31 13:18:22]

sl 과 sll 이 같은 테이블이라고 가정하고.
no 별 일자별 qty 합계와 일자별 합계의 누적 합계를 함께 보길 원한다고 가정하고
쿼리를 작성해 보면...
 

SELECT sl.[No_]
     , sl.[Shipment Date]
     , SUM(sl.[Outstanding Quantity]) AS sales_qty
     , SUM(SUM(sl.[Outstanding Quantity])) OVER(
       PARTITION BY sl.[No_] ORDER BY sl.[Shipment Date]) AS sales_qty_sum
  FROM sh
 INNER JOIN sl
    ON sh.[Document Type]  = sl.[Document Type]
   AND sh.[No_]            = sl.[Document No_] 
 WHERE sh.[Document Type]  = 1
   AND sl.[Location Code] <> 'DROPSHIP'
   AND sl.[Type]           = 2 
 GROUP BY sl.[No_], sl.[Shipment Date]
;

 

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