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
운영게시판
최근게시물
Oracle Q&A 39371 게시물 읽기
No. 39371
단위별 동일 값 설정하기 (쿼리문의)
작성자
정용석(libranet)
작성일
2012-03-30 10:50
조회수
4,332

 오래간만에 쿼리를 짜려니 도저히 머리가 돌아가질 않아 

여러분의 고견을 듣고자 합니다. 

기준쿼리결과 => 결과 을 구하려고 하는데요

CD를 기준으로 동일한 CD인경우 LV가 0인 TEXT 값을 새로운 컬럼('need')에 추가하는 것입니다. 

LV가 0인 값이 없는 경우 그냥 'Z'로 표기하면 됩니다. 

많은 조언 바랍니다.

 

======================  기준데이터 쿼리 ===================

select *

  from (select '0' lv, 'a' text, '123' cd from dual union all

        select '1' lv, 'b' text, '123' cd from dual union all

        select '2' lv, 'c' text, '123' cd from dual union all

        select '0' lv, 'd' text, '124' cd from dual union all

        select '1' lv, 'e' text, '124' cd from dual union all

        select '2' lv, 'f' text, '124' cd from dual union all

        select '0' lv, 'a' text, '125' cd from dual union all

        select '1' lv, 'g' text, '125' cd from dual union all

        select '2' lv, 'h' text, '126' cd from dual)

=======================   기준 쿼리 결과 =======================

LV TEXT CD

0 a 123

1 b 123

2 c 123

0 d 124

1 e 124

2 f 124

0 a 125

1 g 125

2 h 126

====================== 결과 ========================

need   LV TEXT CD

a         0           a         123

a         1           b         123

a         2           c         123

d         0            d         124

d         1           e         124

d         2           f         124

a         0           a         125

a         1           g         125

z          2            h             126  

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

자답입니다. 

first_value 함수를 써서 구하기는 했으나 

lv  0 값이 없을 경우는 처리하지 못했습니다. 

========================  쿼리 ======================

select first_value(text) over (partition by cd order by cd, lv) rn

       , lv, text, cd

  from (select '0' lv, 'a' text, '123' cd from dual union all

        select '2' lv, 'c' text, '123' cd from dual union all

        select '1' lv, 'b' text, '123' cd from dual union all

        select '0' lv, 'd' text, '124' cd from dual union all

        select '1' lv, 'e' text, '124' cd from dual union all

        select '2' lv, 'f' text, '124' cd from dual union all

        select '0' lv, 'a' text, '125' cd from dual union all

        select '1' lv, 'g' text, '125' cd from dual union all

==========================결과 ====================

need LV TEXT CD

a 0 a 123

a 1 b 123

a 2 c 123

d 0 d 124

d 1 e 124

d 2 f 124

a 0 a 125

a 1 g 125

h 2 h 126

 

정용석(libranet)님이 2012-03-30 11:38에 작성한 댓글입니다.

NVL(MIN(DECODE(lv, 0, text)) OVER(PARTITION BY cd), 'z') need

마농(manon94)님이 2012-03-30 12:36에 작성한 댓글입니다.
이 댓글은 2012-03-30 12:37에 마지막으로 수정되었습니다.

마농님 감사합니다~~

코딩만 하다 보니 집합적 사고가 점점 없어지네요;;

정용석(libranet)님이 2012-03-30 13:28에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39374차수 구하는 쿼리 단순하게 할 수 없을까요. [1]
김정묵
2012-04-02
5417
39373대용량 몇천만건 데이터를 조회할때.... [1]
파주
2012-04-01
4195
39372오라클 이럴 경우 문자변환은 어떻게??? [2]
조성훈
2012-03-30
4928
39371단위별 동일 값 설정하기 (쿼리문의) [3]
정용석
2012-03-30
4332
39370data gaurd backupset 삭제
qa
2012-03-29
3338
39369반복되는 INLINEVIEW 성격의 쿼리를 WITH로 빼는게 성능에 좋을까요? [1]
초짜
2012-03-29
4018
39368고수님들 속력문제 입니다. [1]
초보자
2012-03-28
3569
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다