我有一个包含一些值的列:
Values 10 20 30 40 50
我需要一个基本上会给我两个列的查询:
Values PercentageValues 10 0 20 x 30 y 40 z 50 100
计算值的方式如下:10(min
)被认为是0%而50(max
)被认为是100%。所以x与min
的差值为10将为:
x= 100/(50-10) * 10 = 25
P.S:理想情况下,我希望有一个可以在Oracle和SQL Server中运行的查询。
答案 0 :(得分:2)
您可以使用窗口功能执行此操作:
select t.value,
(value - minvalue) * 100.0/(maxvalue - minvalue)
from (select t.*,
min(value) over () as minvalue,
max(value) over () as maxvalue
from t
) t
您可以使用显式联接执行相同的操作:
select t.value,
(value - minvalue) * 100.0/(maxvalue - minvalue)
from t cross join
(select min(value) as minvalue, max(value) as maxvalue
from t
) const
答案 1 :(得分:-1)
select 100.0 / (maxval - minval) * ([Values] - minval)
from (
select *
, min([Values]) over () as minval
, max([Values]) over () as maxval
from Table1
) SubQuerALias