2013-06-10

Select 에서 여러 행을 하나의 행으로 합쳐서 뽑고자 하는 경우


Select 쿼리를 사용하여 나온 결과가 여러행인 경우 키값이 같은 경우 하나의 행으로 보여주고자 하는 경우, 아래의 쿼리를 사용하여 간단하게 원하는 결과값을 얻을 수가 있다.

아래 쿼리는 DB2에서 재현을 해본 결과 해당 쿼리가 무난하게 돌아가는것을 확인하였다.


실행 쿼리 :
=================================
with tb(docno, seqno, prot, empno) as
(
select '1111' docno, 1 seqno, 1 prot, 'AAAA' empno from dual union all
select '1111' , 1 , 2 , 'BBBB' from dual union all
select '5555' , 3 , 1 , 'KKKK' from dual union all
select '5555' , 3 , 2 , 'MMMM' from dual union all
select '5555' , 3 , 3 , 'PPPP' from dual
)
select docno
, seqno
, listagg(empno,' ') WITHIN GROUP (ORDER BY seqNO, prot) as empno
from tb
group by docno
, seqno
;


실행 결과 :
=================================
docno seqno   empno
1111 1     AAAA BBBB
5555 3     KKKK MMMM PPPP


내용 출처 : http://www.oracleclub.com/article/51669

아래의 링크도 참조하기 바랍니다.
 http://blog.naver.com/PostView.nhn?blogId=jauroy&logNo=50044746370

위에 사용된 listagg() 란 함수에 대해 찾아보다가 발견한 아래의 페이지도 참고 바랍니다.
http://blog.naver.com/PostView.nhn?blogId=joonaha&logNo=70108717698

2013-05-26

Linux] Ubuntu 리눅스 설치 후 X윈도우 해상도 맞지 않아서 해상도 조정이 필요한 경우.

- 리눅스 부팅시 터미널 모드 진입
ctrl - alt - F1 : TTY1 로 진입

- 우분투 설치 완료 후 CUI 환경(터미널 모드)로 부팅시 GUI(X-window) 로 부팅하기 위한 설정 방법.
  1. 설치시 설정한 user 로 로그인.
  2. startx 명령을 했을때 에러 발생시 sudo apt-get install xinit 실행하여 x-widnow를 설치
  3. sudo apt-get update 를 실행하여 업데이터 및 설치
  4. sudo apt-get upgrade 를 실행 및 업그레이드
  5. sudo apt-get install ubuntu-desktop 실행해서 desktop manager 설치
  6. startx 로 x-window 실행.

- 위 과정으로 GUI 모드로 부팅후 화면 주사율(해상도)가 맞지 많아 화면이 제대로 나오지 않으면
아래의 과정으로 해결한다.
ubuntu 13.x 버전을 기준으로 한다.

1. 부팅 후 GUI로그인 화면에서  ctrl - alt - F1 를 눌러  TTY1 로 진입한다.
2. 사용자 계정으로 로그인한다.
3. $sudo service ligthdm stop <== service 종료
4. $sudo Xorg -configure   <== 현재 디렉토리에 신규 xorg.conf.new 파일 생성
5. $sudo mv ~/xorg.conf.new /etc/X11/xorg.conf  <== 신규 생성된 파일로 conf  파일 대체
6. $sudo reboot <== 시스템 재시작

위와 같이 하면 GUI에서도 제대로 사용 가능한다.

2013-05-10

SQL] DB2 date 를 milliseconds 로 변환하기.


DB2
=======
select to_number(sysdate - to_date('1970-01-01','YYYY-MM-DD')) * (24 * 60 * 60 * 1000)
FROM sysibm.sysdummy1 ;


ORACLE
========

select to_number(sysdate - to_date('1970-01-01','YYYY-MM-DD')) * (24 * 60 * 60 * 1000)
FROM dual;


2013-04-17

Javascript] Javascript 에서의 replace


자바스크립트에서  replace는 query, java 의 replace 와 달리 처음 등장한 딱 한개만 바꿔준다.

아래와 같이 실행하면,

str = "aaabbbaaa";
result = str.replace("aaa", "ccc");

result는 내가 의도한 "cccbbbccc"가 아닌 "cccbbbaaa"가 나온다.


따라서, 원하는 문자열을 모두 바꾸어 주려면 정규식 표현을 사용해야 한다.

str = "aaabbbaaa";
result = str.replace(/a/g, "c");


위의 /a /g 의 의미는  아래와 같다.
    /a/ : str 변수의 값 중 'a'라는 문자를
    g (완전일치(발생할 모든 pattern에 대한 전역 검색)) str 의 전체 문자열에 대해, 'c'로 변환.

그 외에 다른  플래그는 아래와 같다.

i : 대/소문자 무시, gi : 대/소문자 무시하고 완전 일치

2013-04-03

DB] oracle 에 있는 sign() 의 기능


오라클에 있는  SIGN이라는 함수의 기능은 원하는 결과값(?!)이 양수 / 음수 / 0 이냐에 따라서 값을 반환해주는 함수.

예)
SELECT SIGN(1+1) a, SIGN(1-1)  b, SIGN(1-5) c
FROM DUAL;

결과
---------------------------

a | b | c
==========
1 | 0 | -1


추가적인 예)
필드의 값이 100 이상인 것의 합과 미만인 것의 합을 구하는 쿼리.
출처 : http://ssiso.net/cafe/club/club1/board1/content.php?board_code=oracle%7Coratip&idx=31597&club=oracle


SELECT SUM(CASE SIGN(A-100)
                         WHEN 0 THEN A
                         WHEN 1 THEN A
                         ELSE 0
                     END)                      AS OVER100,
             SUM(CASE SIGN(A-100)
                         WHEN -1 THEN A
                         ELSE 0
                     END)                      AS DOWN100
    FROM DUAL;

2013-03-26

DB2] locking 정보 확인


-- db2 locking 정보 확인.  

SELECT lock_name,
  hld_member,
  lock_status,
  hld_application_handle
FROM  TABLE (MON_GET_APPL_LOCKWAIT(NULL, -2))