5

テーブルから最高値、次に最低値、次に 2 番目に高い値を取得する方法について質問があります。

例: テーブル内

Name        Value
----------------------
Apple        2
Pear         3
Pineapple    6
Mango        7
Kiwi         1

結果は次のようになります。

Name           Value
-----------------------
Mango           7
Kiwi            1
Pineapple       6
Apple           2
Pear            3

ありがとう!

4

3 に答える 3

4

これにより、番号 2 が最大の行に割り当てられ、3 が最小の行に割り当てられ、4 が 2 番目に大きい行に割り当てられます。

select  *
from    (
        select  1 + 2 * row_number() over (order by Value asc) as rnAsc
        ,       2 * row_number() over (order by Value desc) as rnDesc
        ,       t1.*
        from    Table1 t1
        ) SubQueryAlias
order by
        case
        when rnDesc < rnAsc then rnDesc
        else rnAsc
        end

SQL Fiddle の例。

于 2013-05-14T13:32:52.447 に答える
0

素晴らしい質問です。 私の試みをチェックしてください:

SELECT Name,Value
FROM(
    SELECT *, MAX(Rnum) OVER() mx, MAX(Rnum) OVER()/2.0 hf FROM(
        SELECT *, ROW_NUMBER() OVER(ORDER BY value DESC) Rnum From @tbl
    )x
)xx
ORDER BY CASE WHEN Rnum-hf<=0 THEN Rnum ELSE mx-Rnum+1 END, Rnum
于 2013-05-20T12:23:20.950 に答える