MSSQL2008 では、次のように従来の中央値クエリを使用して、共通テーブル式から数値列の中央値を計算しようとしています。
WITH cte AS
(
SELECT number
FROM table
)
SELECT cte.*,
(SELECT
(SELECT (
(SELECT TOP 1 cte.number
FROM
(SELECT TOP 50 PERCENT cte.number
FROM cte
ORDER BY cte.number) AS medianSubquery1
ORDER BY cte.number DESC)
+
(SELECT TOP 1 cte.number
FROM
(SELECT TOP 50 PERCENT cte.number
FROM cte
ORDER BY cte.number DESC) AS medianSubquery2
ORDER BY cte.number ASC) ) / 2)) AS median
FROM cte
ORDER BY cte.number
私が得る結果セットは次のとおりです。
NUMBER MEDIAN
x1 x1
x1 x1
x1 x1
x2 x2
x3 x3
つまり、「中央値」列は、中央値列が「x1」であると予想される場合、「数値」列と同じです。同様の式を使用してモードを計算すると、同じ共通テーブル式に対して正常に機能します。