행을 열으로 나열 하기 0 5 697

by 초봉 [SQL Query] [2020.01.31 14:23:39]


쿼리 도움을 받고자 글을 올립니다 ㅜㅜ

서로 다른테이블을 조회하여 ROWNUM을 부여해서 그 ROW 맞게 조회하고 싶습니다 

예시쿼리는

SELECT *
  FROM (SELECT '1' AS ORD_NO, 'NAME' AS NM FROM DUAL
        UNION ALL
        SELECT '2' AS ORD_NO, 'NAME2' AS NM FROM DUAL
        UNION ALL
        SELECT '1' AS ORD_NO, 'K' AS CD FROM DUAL
        UNION ALL
        SELECT '2' AS ORD_NO, 'K2' AS CD FROM DUAL
        UNION ALL
        SELECT '3' AS ORD_NO, 'K3' AS CD FROM DUAL)

결과는 아래와 나오길 바랍니다.

ORD_NO NM CD
1 NAME K
2 NAME2 K2
3 NAME3  

또는

 

ORD_NO NM CD
1 NAME K
2 NAME2 K2
3   K3

 

고수님들 도와주세영

 

 

by jkson [2020.01.31 14:37:30]

ORD_NO 3은 CD가 없네요 누락 하신 건지..

예시 쿼리는 초봉님이 만들다 만 건가요??

아니면 테이블 데이터가 저렇다는 것인지..

SELECT ORD_NO, MAX(NM) AS NM, MAX(CD) AS CD
  FROM (SELECT '1' AS ORD_NO, 'NAME' AS NM, NULL AS CD FROM DUAL
        UNION ALL
        SELECT '2' AS ORD_NO, 'NAME2' AS NM, NULL AS CD FROM DUAL
        UNION ALL
        SELECT '3' AS ORD_NO, 'NAME3' AS NM, NULL AS CD FROM DUAL
        UNION ALL
        SELECT '1' AS ORD_NO, NULL AS NM, 'K' AS CD FROM DUAL
        UNION ALL
        SELECT '2' AS ORD_NO, NULL AS NM, 'K2' AS CD FROM DUAL)
 GROUP BY ORD_NO
 ORDER BY ORD_NO

 


by 초봉 [2020.01.31 14:48:48]

NM 조회되는 테이블와 CD 조회되는  테이블이 다릅니다.


by jkson [2020.01.31 14:57:14]

동일하게 처리하시면 되지요.

NM을 조회하는 쪽에는 NM컬럼만 기술하고 CD쪽에는 NULL을,

CD를 조회하는 쪽에는 CD컬럼만 기술하고 NM에는 NULL 처리한 후 

GROUP BY 처리.

위에 제가 작성한 쿼리를 보시면 이해가 되실 겁니다.


by 초봉 [2020.01.31 15:01:36]

감사합니다 알려주신 내용으로 처리 되었습니다. 혹시나 NULL 처리 없이 가능한가 해서요 ㅜㅜ


by jkson [2020.01.31 15:08:13]

양쪽에 값이 모두 있다면 그냥 조인해도 되지만 예시처럼 한쪽은 데이터가 없을 수 있다면 

LEFT/RIGHT OUTER JOIN 혹은 FULL OUTER JOIN으로 처리해야합니다.

WITH T1 AS 
(
SELECT '1' AS ORD_NO, 'NAME' AS NM FROM DUAL
UNION ALL
SELECT '2' AS ORD_NO, 'NAME2' AS NM FROM DUAL
UNION ALL
SELECT '3' AS ORD_NO, 'NAME3' AS NM FROM DUAL
)
, T2 AS
(
SELECT '1' AS ORD_NO, 'K' AS CD FROM DUAL
UNION ALL
SELECT '2' AS ORD_NO, 'K2' AS CD FROM DUAL
)
SELECT T1.ORD_NO, T1.NM, T2.CD
FROM T1
FULL OUTER JOIN 
T2
ON T1.ORD_NO = T2.ORD_NO

그런데 FULL OUTER JOIN 보다는 위에 말씀드린 방법이 성능상 나았던 것 같네요.

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