안녕하세요...
예를들어 하나의 record에 no_1,no_2,no_3,no4,no5_에 명명된 컬럼에 숫자형래로 자료가 입력 되어 있는데..
5개 중에서 가장 큰 값 두개를 선택하여면 어떻게 해야 하나요?
아무리 생각 해 봐도 머리가 안굴러 가네요...
이상입니다. 감사합니다.
ASE인 ASA 인지 글구 버전이 뭔지 모르겠지만
이런 식으로 작업하면 되지 않을까요.
참고하세요.
ASA 인 경우는 top 2 을 사용하면 되지만
ASE 인 경우는 temp table 에 넣야 되지 않을 까요
insert into t1 (c1,c2,c3,c4,c5) values (1,2,3,4,5)
go
변수 선언을 해서 작업을 하시면 간단히 해결될거 같은데요..
변수 선언을 하고 application 에서 sorting 로직을 사용하시면 될거 같은데.. 제가 지금 시간이 없어서. --; 간단히 방법만 몇가지 말씀드리죠..
이런 방법 말고도 여러가지 방법은 있을거 같습니다..
예를 들어 cursor 를 선언하고.. fetch 를 하면서 한 row 를 채 column 형태로 변경을 합니다..
aaa bbb ccc ----------- ----------- ----------- 1 2 3 6 5 4 7 6 7
이런 data 가 있다고 가정할때
cursor 선언 후 Fetch 하면서
select aaa col1
into #temp
from aaa1
union all
select bbb col1
select ccc col1
select MAX(col1) ==> 최대
( select MAX(col1) from #temp where col1 < ( select MAX(col1) from #temp )) ==> 두번째
from #temp
이런식도 될거 같구요..
꼭 한문장으로 만 해야 한다면...
select case when case when aaa >= bbb then aaa else bbb end >= ccc then case when aaa >= bbb then aaa else bbb end else ccc end from aaa1 ==> 최대값 등등 방법은 여러 가지가 있을거 같은데..
DB 에서 Data select 후 ap 에서 sorting 로직을 쓰는 방법이 제일 좋을거 같네요.. --; sorting logic 은 internet 에 찾아보시면 많이 있습니다.
create table seo(a varchar(10),b int)
임시저장 할 테이블 하나 만들고요
1>select convert(varchar(10),getdate(),108)set rowcount 2insert seo select 'one',one from numbers order by one descinsert seo select 'two',two from numbers order by two descinsert seo select 'three',three from numbers order by three descinsert seo select 'four',four from numbers order by four descinsert seo select 'five',five from numbers order by five descselect * from seo order by bset rowcount 0select convert(varchar(10),getdate(),108)
2> go
---------- 18:54:06
(1 row affected)(2 rows affected)(2 rows affected)(2 rows affected)(2 rows affected)(2 rows affected) a b ---------- ----------- one 999 one 999
(2 rows affected)
(1 row affected)
1초도 안걸리네요....
안녕하세요? 이전에 저희 사이트로 문의하신 동일한 질문에 답을 올렸는데, 제가 엉뚱한 글을 올려서(야간작업의 연속 여파 --) 좀 당황했습니다. 그런데 이미 보고 인사하시고 가셨더군요... 크게 도움은 되지 않을 것 같지만 답변을 정상적으로 수정하였으니 한번 들러주십시오. 광고성 같아서 사이트는 공개하지 않겠습니다만, 질문하신 분과 지연님은 말씀 드리지 않아도 아실 것 같습니다. 그리고 혹시 더 좋은 방법이 있다면 발자취 남겨 주시면 감사하겠습니다. 추운데 수고들 많으십니다 그럼 이만 (--)(__)
이상하네요.. ^^
암만해도 column 들 중에서 가장 큰값 두개가 아니라..
row 단위에서 두개를 구하는거 같은데..
one tow three four five
-------------------------
1 3 5 4 2
7 8 6 9 1
이런식이면 1 row 에서 5 4
2 row 에서 9 8
이런식의 Data 를 원하는 물음이 아닌 가요 ?
그렇군요, 제가 질문을 잘못 이해 했군요...
temp table로 만들어 봤습니다..
seo에 한 31000여건을 insert하고 작업을 했습니다.
create table seo (name varchar(100),one int,two int,three int,four int,five int)create table #one(name varchar(10),gubun varchar(10), num int)create table #result( name varchar(10),max1 int,max2 int null)
insert #one select name,'one',one from seoinsert #one select name,'two',two from seoinsert #one select name,'three',three from seoinsert #one select name,'four ',four from seoinsert #one select name,'five',five from seo
create index one_i on #one(name,num)insert #result(name,max1) select name ,max(num) from #one group by namedelete #one from #one a ,#result b where a.name=b.name and a.num=b.max1update #result set max2=(select max(num) from #one where #one.name=a.name) from #result a ,#one b where a.name=b.name
select * from #result
시간은 안재봤는데...한 3초(서버에 따라 다르겠지만요, 약간 무식한 방법이긴 한데...생각보다 빠르네요)