제목 그대로 90에서 110사이 계급구간을 구하는 방법이 있을까요?
히스토그램을 구현중에 있습니다.
SELECT '1.00,90.00,92.00,91.00' AS HISTO
UNION ALL SELECT '2.00,92.00,94.00,93.00' AS HISTO
UNION ALL SELECT '3.00,94.00,96.00,95.00' AS HISTO
UNION ALL SELECT '4.00,96.00,98.00,97.00' AS HISTO
UNION ALL SELECT '5.00,98.00,100.00,99.00' AS HISTO
UNION ALL SELECT '6.00,100.00,102.00,101.00' AS HISTO
UNION ALL SELECT '7.00,102.00,104.00,103.00' AS HISTO
UNION ALL SELECT '8.00,104.00,106.00,105.00' AS HISTO
UNION ALL SELECT '9.00,106.00,108.00,107.00' AS HISTO
UNION ALL SELECT '10.00,108.00,110.00,109.00' AS HISTO
END
현재 이렇게 강제로 값을 줘서 구현을 했거든요..
계급수 1이면 최소값 90 최대값 92 이사이에 들어오는 값을 히스토그램으로 구현을 합니다.
계급수 2,3,4 등등.. 마찬가지구요
제가 위처럼 강제로 값을 줘서 저렇게 됬는데 저걸 간단하게 루프돌려서 할수있는 방법이 있을까요?
Comment 3
-
Terry
2016.05.09 09:17
-
Terry
2016.05.09 09:20
질문글의 요지와는 다르게
계급수 1~10에 대응되는 값을 구하는 CTE 쿼리입니다..
쿼리를 조금 변경하면 될듯하네요..
산식에 대한 부분은 질문자님이 더 잘 아실테니까요..^^;
그럼 수고하세요~
-
minsouk
2016.05.10 00:07
요지는 최소값 최대값 등급의 개수가 있으면 loop 돌려서 구하라는 거지요?난 왜 이러고 있는지 궁금합니다declare @min decimal (10,2) = 90
declare @max decimal (10,2) = 110
declare @grade decimal (10,2) = 10
declare @step decimal (10,2) = (@max - @min) / @gradedeclare @cur decimal (10,2) = 1
while (@cur <= @grade)
begin
select @min + (@cur - 1) * @step as minValue
, @min + @cur * @step as maxValue
, (@min + (@cur - 1) * @step) + (((@min + @cur * @step) - (@min + (@cur - 1) * @step)) / 2) as midValue
set @cur = @cur + 1
end쿨럭~
Declare @ldec_from_num Decimal(18,0)
,@ldec_to_num Decimal(18,0)
Select @ldec_from_num = 1
,@ldec_to_num = 10
;with tblA(base,min,max,avg) As
(
Select @ldec_from_num
,@ldec_from_num * 90
,(@ldec_from_num * 90) + 2
,(@ldec_from_num * 90) + 1
/*
,Convert(Decimal(18,0)
,
(
(@ldec_from_num * 90 )
+ ( (@ldec_from_num * 90) + 2 )
) / 2
)
*/
)
--select * from tblA
,tblB(base,min_num,max_num,avg_num,seq) As
(
Select Convert(Decimal(18,2),a.base)
,Convert(Decimal(18,2),a.min)
,Convert(Decimal(18,2),a.max)
,Convert(Decimal(18,2),a.avg)
,Convert(Decimal(18,2),1)
From tblA a
Union All
Select Convert(Decimal(18,2),a.base + 1)
,Convert(Decimal(18,2),a.min_num + 2)
,Convert(Decimal(18,2),a.max_num + 2)
,Convert(Decimal(18,2),a.avg_num + 2)
,Convert(Decimal(18,2),a.seq + 1)
From tblB a
Where a.seq + 1 <= @ldec_to_num
)
Select Rtrim(CONVERT(varchar(max),a.base)) + ','
+ Rtrim(CONVERT(varchar(max),a.min_num)) + ','
+ Rtrim(CONVERT(varchar(max),a.max_num)) + ','
+ Rtrim(CONVERT(varchar(max),a.avg_num))
From tblB a