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 2029 게시물 읽기
No. 2029
커서로 계산하기 ^-^ 그냥 참고로 보셔요
작성자
석이
작성일
2005-06-15 00:06ⓒ
2005-06-15 10:40ⓜ
조회수
3,110

tblx 에 있는 데이터의 최대값 최소값을 찾아

테이블 변수에 넣고

이너 조인을 해서

(값 - 최소값) /( 최대값-최소값)

의 식으로 계산한 다음 리얼 테이블 생성하기 배치 작업이구요

한번 배치 작업을 한 뒤는 insert update delete 트리거를 써서 유지 보수

하시면 이런 테이블을 만들 수 있습니다.

 

원본데이터

a b c d e f
----------- ----------- ----------- ----------- ----------- -----------
1 23 2 4 5 5
2 1 2 4 5 2
3 1 2 4 5 7
4 2 2 32 5 6
5 1 2 4 5 76
6 1 2 4 5 7
7 12 2 4 5 76
8 1 23 231 5 0
9 23 2 4 5 5
10 1 2 4 5 2

 

최대 최소 테이블


msno msMaxValue msMinValue
----------- -------------------- --------------------
1 23 2
2 5 1
3 7 1
4 32 2
5 76 1
6 7 1
7 76 2
8 231 0
9 23 2
10 5 1

 

결과 데이터

식별자 1번 2번 3번 4번 5번
----------- -------------------- -------------------- -------------------- -------------------- --------------------
1 1.0000 0.0000 0.0952 0.1429 0.1429
2 0.0000 0.2500 0.7500 1.0000 0.2500
3 0.0000 0.1667 0.5000 0.6667 1.0000
4 0.0000 0.0000 1.0000 0.1000 0.1333
5 0.0000 0.0133 0.0400 0.0533 1.0000
6 0.0000 0.1667 0.5000 0.6667 1.0000
7 0.1351 0.0000 0.0270 0.0405 1.0000
8 0.0043 0.0996 1.0000 0.0216 0.0000
9 1.0000 0.0000 0.0952 0.1429 0.1429
10 0.0000 0.2500 0.7500 1.0000 0.2500

 

 

if exists(select table_name from information_schema.tables where table_name='realTable')
begin
print '테이블을 삭제 하고 리얼 테이블을 다시 만듭니다.'
drop table realTable
create table realTable
(
msno int
,msb float
,msc float
,msd float
,mse float
,msf float
)

end
else
begin
create table realTable
(
msno int
,msb float
,msc float
,msd float
,mse float
,msf float
)
end

-- 일괄 처리를 위한 커서 프로그램
declare 커서일괄업데이트 cursor
for select a,b,c,d,e,f from tblx
open 커서일괄업데이트

declare @a int,@b int,@c int,@d int,@e int,@f int
declare @tbly table
(
msno int
,msValue int
)
declare @tblz table
(
msno int
,msMaxValue decimal
,msMinValue decimal
)

fetch next from 커서일괄업데이트 into @a,@b,@c,@d,@e,@f
while @@fetch_status = 0
begin
insert into @tbly (msno, msValue) select a,b from tblx where a = @a
insert into @tbly (msno, msValue) select a,c from tblx where a = @a
insert into @tbly (msno, msValue) select a,d from tblx where a = @a
insert into @tbly (msno, msValue) select a,e from tblx where a = @a
insert into @tbly (msno, msValue) select a,f from tblx where a = @a

insert into @tblz (msno, msMaxValue, msMinValue)
select @a, max(msValue),min(msValue)
from @tbly
where msno = @a


insert into realTable (msno,msb,msc,msd,mse,msf)
select
aa.msno
, (bb.b - aa.msMinValue)/(aa.msMaxValue-aa.msMinValue)
, (bb.c - aa.msMinValue)/(aa.msMaxValue-aa.msMinValue)
, (bb.d - aa.msMinValue)/(aa.msMaxValue-aa.msMinValue)
, (bb.e - aa.msMinValue)/(aa.msMaxValue-aa.msMinValue)
, (bb.f - aa.msMinValue)/(aa.msMaxValue-aa.msMinValue)

from @tblz aa inner join tblx bb
on aa.msno = bb.a
where aa.msno = @a

fetch next from 커서일괄업데이트 into @a,@b,@c,@d,@e,@f
end
select * from @tblz
select msno as 식별자
, convert(varchar(20),cast((msb) as money),2) as [1번]
, convert(varchar(20),cast((msc) as money),2) as [2번]
, convert(varchar(20),cast((msd) as money),2) as [3번]
, convert(varchar(20),cast((mse) as money),2) as [4번]
, convert(varchar(20),cast((msf) as money),2) as [5번]
from realTable
go

close 커서일괄업데이트
deallocate 커서일괄업데이트
select * from tblx

[Top]
No.
제목
작성자
작성일
조회
2032쿼리문 작성하라는데... ㅠㅠ [4]
김중생
2005-06-17
3324
2031CUBE 를 만들려고 하는데 잘 안되네요..
초보
2005-06-15
2218
2030주별 첫째날 가져오는 스크립트 질문 [2]
김인수
2005-06-15
2899
2029커서로 계산하기 ^-^ 그냥 참고로 보셔요
석이
2005-06-15
3110
2026회원통계 보기 (나별 성별~) [6]
석이
2005-06-14
3665
2025DTS 실행을 VB Script로 저장한후에 이를 실행하려면? [3]
나그네
2005-06-13
2535
2024프로시저 컬럼 이름알기 [3]
박승이
2005-06-13
2730
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다