database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
ㆍSybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Sybase Q&A 1357 게시물 읽기
No. 1357
group by후 outer join 하려면?
작성자
김운희
작성일
2005-11-04 14:27ⓒ
2005-11-04 15:57ⓜ
조회수
5,510

항상 이 곳에서 도움을 받고 있는데 대해 감사드립니다.

아래와 같은 문장은, 먼저 양 테이블에 조인을 한 후 이를 group by하도록 되어 있는데,

이것을, mv_stock_lot 에 먼저 group by를 한 후 it_stock과 join을 하려고 합니다.

어떻게 하는게 가장 효율적일 지 도움 부탁드립니다.

참고로, mv_stock_lot은 테이블 6개 정도를 union한 view이기 때문에 효율성이 중요합니다.

 

SELECT v_itemcd, v_whcd, v_lot, v_len1, v_len2,
sum(IsNull(sto_totqty,0)), sum(IsNull(v_stockqty,0)) AS end_stock
FROM mv_stock_lot FULL OUTER JOIN it_stock ON v_itemcd = sto_itemcd
AND v_whcd = sto_whcd
AND v_lot = sto_lot
AND v_len1 = sto_len1
AND v_len2 = sto_len2
, mt_item
WHERE v_itemcd = itm_itemcd
GROUP BY v_itemcd, v_whcd, v_lot, v_len1, v_len2;

 

그리고, Full Outer Join을 써야하는 상황인데, 위 문장에서, mt_item과의 join을 빼면 FULL join이 안되는데 이유가 뭘까요?

 

감사합니다. (__)

 

=====================

아래와 같이 하면 될 것 같은데, 문제는 FULL outer join이네요.. LEFT와 RIGHT를 union하는 수 밖에 없을가요? (참 Sybase ASA 7.0.4 사용중입니다.)

SELECT v_itemcd, v_whcd, v_lot, v_len1, v_len2,
sum(isnull(v_sumqty,0)), sum(isnull(sto_totqty,0)),
FROM
(SELECT v_itemcd, v_whcd, v_lot, v_len1, v_len2,
sum(IsNull(v_stockqty,0)) v_sumqty
FROM mv_stock_lot
GROUP BY v_itemcd, v_whcd, v_lot, v_len1, v_len2) AS temp
FULL OUTER JOIN it_stock ON v_itemcd = sto_itemcd
AND v_whcd = sto_whcd
AND v_lot = sto_lot
AND v_len1 = sto_len1
AND v_len2 = sto_len2
GROUP BY v_itemcd, v_whcd, v_lot, v_len1, v_len2;

 

이 글에 대한 댓글이 총 2건 있습니다.

질문하신 내용을 보니,

쿼리문만 가지고는 해석하기가 난해했습니다.

분석해 본 결과,

full outer join을 이용하려고 한 것이 잘못 되었다는 결론을 얻었습니다.

 

mv_stock_lot 테이블에서 v_totqty의 합을 구하고,

it_stock 테이블에서 sto_totqty의 합을 구하는 거네요.

 

이러한 문장은 각 각의 합계를 구하여 다른 컬럼으로 하고

union all 한 후

다시 Group by하여 합계를 보여주면 간단히 해결 됩니다.

 

다음과 같이 해보세요.

 

SELECT
 v_itemcd,
 v_whcd,
 v_lot,
 v_len1,
 v_len2,
 sum(lot_sumqty),
 sum(sto_sumqty)
from

(

 SELECT
  v_itemcd,
  v_whcd,
  v_lot,
  v_len1,
  v_len2,
  sum(v_sumqty) as lot_sumqty,
  0 as sto_sumqty
 FROM mv_stock_lot
 GROUP BY
  v_itemcd,
  v_whcd,
  v_lot,
  v_len1,
  v_len2

 

 union all

 

 SELECT
  sto_itemcd,
  sto_whcd,
  sto_lot,
  sto_len1,
  sto_len2,
  0 as lot_sumqty,
  sum(sto_totqty) as sto_sumqty
 FROM it_stock
 GROUP BY
  sto_itemcd,
  sto_whcd,
  sto_lot,
  sto_len1,
  sto_len2

) as temp

 

GROUP BY v_itemcd, v_whcd, v_lot, v_len1, v_len2

 

존넘님이 2005-11-04 17:28에 작성한 댓글입니다.
이 댓글은 2005-11-04 17:31에 마지막으로 수정되었습니다. Edit

귀한 시간 쪼개어 조언 주셔서 대단히 감사합니다. 큰 도움이 되었습니다~^^

김운희님이 2005-11-04 23:47에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1360[기본명령어] 이것좀 알려주세요 [1]
김대중
2005-11-07
4827
1359character set 설정하기 - 알려주세요 ㅡㅡ; [4]
2005-11-07
10670
1358사용자 계정의 비밀번호 [2]
김완림
2005-11-04
5383
1357group by후 outer join 하려면? [2]
김운희
2005-11-04
5510
1356foreign Key 지정방법 [1]
지니
2005-11-04
3336
1355DB START ERROR [2]
김충관
2005-11-03
3103
1354Pk 정보가 옆에 함께 나올려면 어떻게 해야 하나요? [2]
밍호
2005-11-03
5903
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.026초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다