2

次のクエリがあります

SELECT  Cod ,
        MIN(Id) AS id_Min,
        MAX(Id) AS id_Max,
        -- retrieve value in the middle,
        COUNT(*) AS Tot

FROM    Table a ( NOLOCK )        
GROUP BY Cod
HAVING  COUNT(*)=3

最小値と最大値に対して行ったように、最小値と最大値の間の値を取得するにはどうすればよいですか?

Cod      |  Id

Stack       10
Stack       15
Stack       11
Overflow    100
Overflow    120
Overflow    15

必要な出力

Cod         | Min   | Value_In_The_Middle  |    Max

Stack         10          11                    15
Overflow      15          100                   120
4

1 に答える 1

4

私はこれをテストしていませんが、これはうまくいくと思います

SELECT  Cod ,
        MIN(Id) AS id__Min,
        MAX(Id) AS id_Max,
        SUM(ID)-MAX(Id)-MIN(Id) as id_Middle,
        COUNT(*) AS Tot
FROM    Table a ( NOLOCK )        
GROUP BY Cod
HAVING  COUNT(*)=3

このトリックは、値が 3 つあり、SUM() がオーバーフローしない場合にのみ機能します ( Bogdan Sahleanがコメントで指摘しているように)。

于 2012-04-18T09:59:08.893 に答える