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
운영게시판
최근게시물
MS-SQL Q&A 1763 게시물 읽기
No. 1763
오라클에서 사용하는 over(partition by ) 함수를 mssql에서 사용이 가능한가요?
작성자
남상우(jyansmin)
작성일
2005-02-01 10:29ⓒ
2005-02-01 11:25ⓜ
조회수
6,354

안녕하세요.

이번에 하는 일이 오라클에서 개발한 소스를 그대로 ms-sql2000에 포팅을 해야합니다.

저가 오라클만 공부를 해서 ms-sql에는 전혀 몰라서 이렇게 글을 올립니다.

오라클에서는 아래와 같은 함수를 지원을 합니다. 그룹별로 몇개가 있는지 파악하는 것입니다.

그런데 ms-sql에서 이와 같은 함수를 대처할 수 있는 함수가 있나요?

아래 sql의 dual 테이블은 테스트 용으로 해 놓은 것입니다.

SELECT code, mcode , COUNT(*) OVER (PARTITION BY code) AS rowspan FROM

( select '코드1' code, '모르' mcode from dual
union all
select '코드1' code, '야느' mcode from dual
union all
select '코드3' code, '아지' mcode from dual
union all
select '코드8' code, '양크' mcode from dual
union all
select '코드8' code, '양므' mcode from dual
union all
select '코드8' code, '인디' mcode from dual

)

 

결과는

코드1 모르 2

코드1 야느 2

코드3 아지 1

코드8 양크 3

코드8 양므 3

코드8 인디 3

 

이렇게 결과가 나올수 있는 ms-sql 함수 좀 알려 주세요.

 

없다면 아래와 같은 sql은 사용이 가능한가요.. mssql에서요.

꼭 답변 좀 부탁합니다.

SELECT code, mcode ,
  (select count(*) from
    ( select '코드1' code, '모르' mcode from dual
  union all
  select '코드1' code, '야느' mcode from dual
  union all
  select '코드3' code, '아지' mcode from dual
  union all
  select '코드8' code, '양크' mcode from dual
  union all
  select '코드8' code, '양므' mcode from dual
  union all
  select '코드8' code, '인디' mcode from dual
  ) where code = a.code
  )
  rowspan
FROM
( select '코드1' code, '모르' mcode from dual
union all
select '코드1' code, '야느' mcode from dual
union all
select '코드3' code, '아지' mcode from dual
union all
select '코드8' code, '양크' mcode from dual
union all
select '코드8' code, '양므' mcode from dual
union all
select '코드8' code, '인디' mcode from dual
) a

 

 

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

Over라는 함수를 저는 아직 mssql에서 본적이 없는듯 합니다.

우선 oracle의 sql구문과의 차이점은

over, partition, dual이라는 부분인데요.

over, patition은 mssql에서는 존재하지 않습니다.

또한 dual이라는 부분은 mssql에서는 아예 from 이하구문이 사라지게 됩니다.

 

따라서 위의 구문과 같은 결과가 나오게 한다면 아래와 같이 해야 하지 않을까 합니다. (얼추 비슷하지만...)

 

select x.code, x.mcode,
  (select count(*) from
  (select '코드1' code, '모르' mcode
  union all
    select '코드1' code, '야느' mcode
    union all
    select '코드3' code, '아지' mcode
    union all
    select '코드8' code, '양크' mcode
    union all
    select '코드8' code, '양므' mcode
    union all
    select '코드8' code, '인디' mcode)  a
  where a.code = x.code)

from
  (select '코드1' code, '모르' mcode
  union all
    select '코드1' code, '야느' mcode
    union all
    select '코드3' code, '아지' mcode
    union all
    select '코드8' code, '양크' mcode
    union all
    select '코드8' code, '양므' mcode
    union all
    select '코드8' code, '인디' mcode)  x

 

여리님이 2005-02-01 12:02에 작성한 댓글입니다. Edit

답변 감사합니다.

오라클 용으로 만든 sql을 잘하면 ms-sql에서도 그대로 사용이

가능하겠네요.

좋은 하루가 되세요.

남상우(jyansmin)님이 2005-02-01 12:39에 작성한 댓글입니다.

네 그렇습니다.

아다시피 oracle은 전세계 표준 DBMS이죠.

그리고 그게 oracle용 함수가 아닌 ansi sql문으로 구성되었다면

mssql에서 그대로 먹히게 됩니다. ^^

여리님이 2005-02-01 13:35에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1766다중 함수 사용 시 속도 문제
이정우
2005-02-02
4295
1765MS-SQL 에서 mysql 의 LAST_INSERT_ID() 와 같은 역활을 하는 함수는? [3]
이지환
2005-02-01
8873
1764구문이 왜 잘못 되었다는 걸까요? [1]
서준용
2005-02-01
3018
1763오라클에서 사용하는 over(partition by ) 함수를 mssql에서 사용이 가능한가요? [3]
남상우
2005-02-01
6354
1762[긴급요청]이미 데이터가 들어간 테이블에 Primary key를 설정하려면 어케 해야하나요? [1]
박은영
2005-01-31
2978
1761jdbc error, connection reset by peer
질문자
2005-01-31
3279
1760osql 에서 질문 입니다. [2]
김민석
2005-01-29
2543
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다