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
운영게시판
최근게시물
DB2 Q&A 1309 게시물 읽기
No. 1309
rownumber() 대신 사용할수 있는것좀 알려주세요.
작성자
무명
작성일
2007-04-11 18:13
조회수
10,009

쿼리를 대충 써보면 
SELECT * 
    FROM (
                SELECT B.CLOUM
                    FROM (
                               SELECT CLOUM FROM TABLE WHERE A = 'AAA'
                              ) A, TABLE B
                  WHERE A.CLOUM = B.CLOUM2
                       AND A.XX = 'DEF'
              ) A_1,
             (
                SELECT B.CLOUM
                    FROM (
                               SELECT CLOUM FROM TABLE WHERE A = 'AAA'
                              ) A, TABLE B
                  WHERE A.CLOUM = B.CLOUM2
                       AND A.XX = 'ABC'
              ) B_1

이 쿼리문에서 문제는 저기 있는 테이블은 한테이블에서 계속 값을 가져 오는것이고, 
써브 A_1과 B_1에서 가져오는 값은 서로 맴핑이 안됩니다....
그래서 rownumber() over() << 를 쓸려구 했는데.. 이게 또 버전이 낮아서 안먹습니다. 
A_1 써브에서 최대 2개 B_1에서 최대 2개의 값이 나올경우에 대하여 현재 저상태로 쿼리를 
날릴경우 값이 2개씩 일때

A_1    테이블
------------------
A___
B___


B_1 테이블
------------------
C___
D___


최종 결과
a 컬럼               b컬럼
-------------------------
A___                  C___
A___                  D___
B___                  C___
B___                  D___


원하는 결과값은 위의 결과 값이 아니고.
a 컬럼               b컬럼
-------------------------
A___                  C___
B___                  D___

A컬럼 과 B컬럼의 해당값은 위아래는 상관이 없고 무조건 한개씩만 나오면 상관이 없습니다.
위의 결과 처럼 나오도록  A_1 서브 쿼리와 B_1 서브쿼리에 맴핑시킬 값이 필요한데.. 각 서브쿼리에
ROWNUMBER를 넣을수 잇는 방안좀 알려주시면 감사하겠습니다.
아 처음에 FULL OUTER JOIN을 사용해서 해볼려고 했었으나 FULL OUTER JOIN이 안먹힌다는..
고수님 부탁좀 드리겠습니다.

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

참고하이소 (단 비교값에 중복이 있음 안됨)

WITH
TBL(NO) AS (VALUES
('02'),('08'),('05'),('04'),('09'),
('03'),('07'),('06'),('01'),('10'))

----------------

SELECT NO1, SUM(CASE WHEN NO1 >= NO2 THEN 1 ELSE 0 END) RNO
  FROM (SELECT T1.NO NO1, T2.NO NO2
          FROM TBL T1 ,TBL T2) T3
GROUP BY NO1
ORDER BY RNO 

01   1
02   2
03   3
04   4
05   5
06   6
07   7
08   8
09   9
10  10

WHEN NO1 >= NO2 를 WHEN NO1 <= NO2 로 바꾸면

10   1
09   2
08   3
07   4
06   5
05   6
04   7
03   8
02   9
01  10

또는 ( S390 V7에서는안됨)
SELECT NO, (SELECT COUNT(*) FROM TBL T2 WHERE T1.NO >= T2.NO) RNO
  FROM TBL T1
ORDER BY RNO

박진복(pjb708)님이 2007-04-20 11:16에 작성한 댓글입니다.
이 댓글은 2007-04-20 11:45에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
1314db2 에서 csv 파일로 export 할때 컬럼명도 같이 받을수 있나요? [3]
db2초짜
2007-04-13
8237
1313출력 결과에 구분자를 넣고 싶은데요.^^: [1]
이승훈
2007-04-12
7372
1310데이타베이스 복구방법
미리내
2007-04-11
7250
1309rownumber() 대신 사용할수 있는것좀 알려주세요. [1]
무명
2007-04-11
10009
1308DB2 서버가 2대인 경우에...
DB2사랑
2007-04-11
7525
1307SENSITIVE 커서 "SQL_CURSN300C1"은(는) 지정된 SELECT문에 정의할 수 없습니다. [1]
초보자
2007-04-10
9327
1304Error: SQL0104 - Token DCCONT1 was not valid. Valid tokens: NO FOR NOT FILE WITH CCSID CHECK UNIQUE DEFAULT PRIMARY. (State:37000, Native Code: FFFFFF98)에러요!! [1]
윤진수
2007-04-06
8499
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다