回 帖 发 新 帖 刷新版面

主题:求教:数据转换

如何将前列的数据转换成结分,在后列里自动输入.

前一列为数据(s),其中有m个数。
要求:根据每个数,按从大到小排列的名次(n),求出结分(j),自动填入后一列(j)对应的单元格。j只与s的大小和个数m有关。
规则:(1)当s中没有相同值,即无相同的n时   j=(m-n)*2
       (2)当s中有k个相同值,相同值按(1)的公式求出的j各减去(k-1)分,其余不变。
例:(以行代列)
     例1:m=7   (s) 3  5  7  4  6  1  2
                (n) 5  3  1  4  2  7  6
                (j) 4  8  12 6  10 0  2
    
     例2:m=8   (s) 8   4   [color=FF0000]5   5[/color]   3   [color=FF0000]5[/color]   7   [color=FF0000]5[/color]  
          k=4   (n) 1   7   3   3   8   3   2   3     
                (j) 14  2   [color=FF0000]7   7[/color]   0   [color=FF0000]7[/color]   12  [color=FF0000]7[/color]

     例3:m=9   (s) [color=FF00FF]8[/color]   5   [color=00FF00]3[/color]   6   9   [color=00FF00]3[/color]   [color=FF00FF]8   8[/color]   7
          k=2,3 (n) 2   7   8   6   1   8   2   2   5    
                (j) [color=FF00FF]12[/color]  4   [color=00FF00]1[/color]   6   16  [color=00FF00]1[/color]   [color=FF00FF]12  12[/color]  8     谢谢!

回复列表 (共1个回复)

沙发

SELECT * FROM TEST

SELECT S,N,M,K,(M-N)*2-(K-1) J FROM (
   SELECT S,(SELECT COUNT(*) FROM TEST A WHERE A.S>B.S)+1 N,(SELECT COUNT(*) FROM TEST A) M,(SELECT SUM(1) FROM TEST A WHERE A.S=B.S) K  FROM TEST B
)A

S           
----------- 
8
5
3
6
9
3
8
8
7

(所影响的行数为 9 行)

S           N           M           K           J           
----------- ----------- ----------- ----------- ----------- 
8           2           9           3           12
5           7           9           1           4
3           8           9           2           1
6           6           9           1           6
9           1           9           1           16
3           8           9           2           1
8           2           9           3           12
8           2           9           3           12
7           5           9           1           8

(所影响的行数为 9 行)

我只做了一列,你可以自己按要求修改看看.

我来回复

您尚未登录,请登录后再回复。点此登录或注册