2010-10-12 5 views
0

Voilà ma tableComment écrire une requête onglet croix avec la médiane

ST NUM 
1 1 
1 2 
1 2 
2 1 
2 2 
2 2 
3 2 
3 8 

Je veux retourner une requête où il retourne la médiane de NUM pour chaque ST

ST NUM 
1 2 
2 2 
3 5 

J'ai déjà une médiane fonction

SELECT 
CONVERT(DECIMAL(10,2), (
(CONVERT (DECIMAL(10,2), 
(SELECT MAX(num) FROM 
(SELECT TOP 50 PERCENT num FROM dbo.t ORDER BY num ASC) AS H1) 
+ 
(SELECT MIN(sortTime) FROM 
(SELECT TOP 50 PERCENT num FROM dbo.t ORDER BY num DESC) AS H2) 
)))/2) AS Median 

Des conseils pour ce faire?

Répondre

2

essayer cette

With 
MedianResult 
as 
(
Select 
ST,NUM , 
Row_Number() OVER(Partition by ST Order by NUM) as A, 
Row_Number() OVER(Partition by ST Order by NUM desc) as B 
from **YourTableName** 

) 
Select ST, Avg(NUM) as Median 
From MedianResult 
Where Abs(A-B)<=1 
Group by ST 
Questions connexes