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 6362 게시물 읽기
No. 6362
select top 3 값을 변수에 담는법 저장프로시저에서요
작성자
이용한
작성일
2012-04-13 13:42
조회수
8,204

 예를 들어

저장 프로시저에서

declare int i1, i2, i3

 

select top 3 from Info order by exp desc

위 처럼 3개가 나온값을 차례대로

i1, 

i2, 

i3 에 담고 싶은데 어떤식으로 해야 할까요?

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

 -- on your mark

create table t3 (
aa int not null identity(1,1)
);
go
-- get set
insert into t3 default values;
go 2000
 
--인덱스가 있을때 혹은 없을때 test 해보기 위해서
--create unique clustered index ix_t3_aa on t3(aa); drop index t3.ix_t3_aa ;
 
-- go(평범하게)
declare @i1 int, @i2 int, @i3 int;
 
declare @tt table ( rnk int identity(1,1) primary key, aa int );
 
insert into @tt( aa )
select top 3 aa from t3 order by aa desc;
 
select @i1 = aa from @tt where rnk = 1;
select @i2 = aa from @tt where rnk = 2;
select @i3 = aa from @tt where rnk = 3;
go
 
-- go(그런데 순서가 desc인걸 알고 정수인거 같고 그리고 딱 3개이기 때문에 가능한 꼼수.. -_-;;)
declare @i1 int, @i2 int, @i3 int;
select @i1 = MAX(aa), @i2 = SUM(aa) - MAX(aa) - MIN(aa), @i3 = MIN(aa) from (select top 3 aa from t3 order by aa desc) as aa;
go
 
-- 흘리지 말아야 할 것은 눈물뿐만이 아니라 테스트 테이블도
drop table t3;
 
우욱님이 2012-04-13 17:53에 작성한 댓글입니다. Edit

SELECT i1 = MAX(CASE WHEN Rownum = 1 THEN exp ELSE '' END) 
              , i2 = MAX(CASE WHEN Rownum = 2 THEN exp ELSE '' END)
              , i3 = MAX(CASE WHEN Rownum = 3 THEN exp ELSE '' END) 
    FROM (
              SELECT top 3 exp
                            , ROW_NUMBER() OVER(ORDER BY exp DESC) Rownum
                  FROM info 
               ORDER BY exp DESC
               ) a
 

 이렇게 하는 방법도 있을듯 합니다.

 

착한넘(agoodman99)님이 2012-04-18 09:30에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
6367MSSQL 2005 데이터 형식 여쭤봅니다. [1]
정필교
2012-04-19
6945
6366DB서버 동시접속 몇명까지인가요? [1]
이성안
2012-04-19
9082
6364쿼리 질문이요 [1]
KISS
2012-04-16
6804
6362select top 3 값을 변수에 담는법 저장프로시저에서요 [2]
이용한
2012-04-13
8204
6361ms-sql row 복재 connect by level < ? 기능 여부 [1]
nightbobo
2012-04-12
7141
6360아래 추가 질문입니다. varchar(max) 관련 [1]
초보
2012-04-09
8050
6359필드의 크기 [1]
궁금이
2012-04-06
6093
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다