여러행을 한줄로 나타내는 쿼리 좀 질문 드리겠습니다.. 0 3 3,165

by 손님 [2012.06.18 22:25:57]



죄솧합니다..

앞전 글이 제대로 등록이 안된 바람에 다시 질문 드립니다.

SELECT a.name, a.ssn, b.A, b.B, b.C, b.A_1, b.B_1...
FROM CUST A, SVC B
WHERE A.SSN = B.SSN(+)

결과 B데이터가 많기 때문에

a.name a.ssn B.A  B.b B.C
a.name a.ssn B.A_1  B.b B.C

라는 결과를 얻게 되는데

a.name a.ssn  b.A, b.B, b.C, b.A_1, b.B_1,  b.B_1, b.A_2, b.B_2,  b.B_2....

여러행을 한줄로 나타내고 싶습니다..

방법 좀 부탁드립니다..
 
by 마농 [2012.06.19 09:27:35]

행을 열로 바꾸는 방법은
1. 11g 의 Pivot 이나
2. 10g 이하에서는 Group By 와 Min(Decode()) 를 함께 사용하는 방법이 있습니다.


일단 위 쿼리만으로는 데이터를 알 수 없네요.
데이터를 봐야 어떻게 작성해야 할지를 알 수 있습니다.
1. b 의 정해진 값에 따라 컬럼을 분리할지?
2. 값에 의한 분리가 불가능하면 순번을 붙여서 분리할지?
3. 순번의 갯수가 고정적인지 가변적인지?


행은 가변적이지만 열은 고정적입니다.
SQL만으로는 열을 가변적으로 표시할 수는 없습니다.
1. 프로그램에서 SQL 문장을 동적으로 구성하는 방법
2. 컬럼의 최대 갯수를 정해놓고 SQL을 작성하는 방법


by 손님 [2012.06.19 10:19:46]

b테이블의 순번의 갯수는 고정적이지 않습니다.

최대한 5행까지 한줄에  나타내고 싶습니다.

by 마농 [2012.06.19 15:00:23]
SELECT deptno, dname
     , MIN(DECODE(rn, 1, empno)) empno_1
     , MIN(DECODE(rn, 1, ename)) ename_1
     , MIN(DECODE(rn, 1,   sal))   sal_1
     , MIN(DECODE(rn, 2, empno)) empno_2
     , MIN(DECODE(rn, 2, ename)) ename_2
     , MIN(DECODE(rn, 2,   sal))   sal_2
     , MIN(DECODE(rn, 3, empno)) empno_3
     , MIN(DECODE(rn, 3, ename)) ename_3
     , MIN(DECODE(rn, 3,   sal))   sal_3
     , MIN(DECODE(rn, 4, empno)) empno_4
     , MIN(DECODE(rn, 4, ename)) ename_4
     , MIN(DECODE(rn, 4,   sal))   sal_4
     , MIN(DECODE(rn, 5, empno)) empno_5
     , MIN(DECODE(rn, 5, ename)) ename_5
     , MIN(DECODE(rn, 5,   sal))   sal_5
  FROM (
        SELECT d.deptno, d.dname
             , e.empno, e.ename, e.sal
             , ROW_NUMBER() OVER(PARTITION BY d.deptno ORDER BY e.empno) rn
          FROM dept d, emp e
         WHERE d.deptno = e.deptno
        )
 GROUP BY deptno, dname
 ORDER BY deptno, dname
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입