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
|