2012-03-09 11 views
0

を中央の値を表示する可能性の重複:
は、動的テーブルから

Function to Calculate Median in Sql Server

目標:
は以下のコードに基づいて、メディアンの値を表示します。

問題:
私はどのように表は、将来的に新しい値を取得することができますし、すべての行が奇数か偶数することができ、SQLサーバーに

それを表示しないためにしません。

declare @T table 
( 
    Name varchar(50), 
    Sales int 
) 

insert into @T values 
('John',  '50'), 
('Jennifer', '15'), 
('Stella', '20'), 
('Sophia', '40'), 
('Greg',  '10'), 
('Jeff',  '20') 

答えて

0

これは動作するはずです:

SELECT AVG(tt.Sales) AS Median 
FROM (
    SELECT TOP 1 t1.* FROM 
    (SELECT TOP 50 PERCENT FROM @T ORDER BY Sales) t1 
    ORDER BY t1.Sales DESC 
    UNION 
    SELECT TOP 1 t2.* FROM 
    (SELECT TOP 50 PERCENT FROM @T ORDER BY Sales DESC) t2 
    ORDER BY t2.Sales 
) tt 

ちょうどそれを表示するには、あなたが

DECLARE @Median REAL 
SELECT @Median=AVG(tt.Sales) AS Median 
FROM (
    SELECT TOP 1 t1.* FROM 
    (SELECT TOP 50 PERCENT FROM @T ORDER BY Sales) t1 
    ORDER BY t1.Sales DESC 
    UNION 
    SELECT TOP 1 t2.* FROM 
    (SELECT TOP 50 PERCENT FROM @T ORDER BY Sales DESC) t2 
    ORDER BY t2.Sales 
) tt 

PRINT CONVERT(VARCHAR, @Median) 
+0

は長さを指定せずにVARCHARを使用しないでください行うことができます。 http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx –