有这样一段程序:
WITH cte
AS ( SELECT b.max_2014 ,
a.index_id ,
b.min_2014 ,
b.exam_sort ,
b.variation_char,
POWER(ABS(( a.ori_value - b.min_2014 ) / ( b.max_2014
- b.min_2014 )),
1.4) * 40 + 60 AS iscontr2
FROM court_stat a
INNER JOIN range_rule b ON a.index_id = b.index_id
)
如果列名index_id是唯一的值,则运算结果正常。
但是,如果index_id不唯一,形如:
index_id ori_value 结果
1_07 0.222222 90.02903452
1_07 0.428571 90.02903452
1_07 1 90.02903452
如果此时用上述代码,第一个index_id对应的结果运算正常,但是后面的index_id对应的结果都会引用第一个index_id对应的结果值。实际上,列ori_value的值是不同的,因此每一个index_id对应的结果本质上是不同的。
稍微抽象一下:当有多个相同的列值时,如何使用内关联inner join为相同列值对应的不同目标计算对象赋予不同的值?
------解决方案--------------------
try this,
with cte as
(select b.max_2014,
a.index_id,
b.min_2014,
b.exam_sort,
b.variation_char,
power(abs((a.ori_value-b.min_2014)/( b.max_2014-b.min_2014)),1.4)*40+60 'iscontr2'
from (select distinct index_id,ori_value from court_stat) a
inner join range_rule b on a.index_id = b.index_id
)
select * from cte
------解决方案--------------------
用cte的时候最好用主键进行关联吧,否则递归的时候肯定会出问题