0

我有一列包含一些值:

价值观
 10
 20
 30
 40
 50

我需要一个基本上会给我两列这样的查询:

值百分比值
10 0
20 倍
30 岁
40z
50 100

计算值的方式是这样的:10( min) 被认为是 0 %,而 50( max) 被认为是 100%。所以 x 与 10 的差值为min

x= 100/(50-10) * 10 = 25

PS:理想情况下,我希望有一个可以在 Oracle 和 SQL Server 中运行的查询。

4

2 回答 2

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
于 2013-04-03T17:53:15.323 回答
-1
select  100.0 / (maxval - minval) * ([Values] - minval)
from    (
        select  *
        ,       min([Values]) over () as minval
        ,       max([Values]) over () as maxval
        from    Table1
        ) SubQuerALias

SQL Fiddle 的示例。

于 2013-04-03T17:51:34.897 回答