2017-05-22 1 views
0

각 DonorType 그룹에 대해 중앙값 계산을 실행하는 데 도움이되는지 궁금합니다. 쿼리를 통해 모든 값을 중앙값으로 처리하고 각 사례 그룹의 값을 계산하지 않습니다. 나는 몇 가지를 시도하고 주위를 둘러 보았지만 나는 갇혀있다.따라야 할 중앙값 필요 그룹 별 사례

는 여기에 내가있어 무엇 :

SELECT DonorType = CASE WHEN [Criteria1] THEN 'AutoRecurring' 
        WHEN [Criteria2] THEN 'ManualRecurring' 
        ELSE 'NonRecurring' END, 
COUNT(DISTINCT AccountNumber) AS TotalDonors, MIN(TotalDonationAmount) AS MinAmount, 
MAX(TotalDonationAmount) AS MaxAmount, AVG(TotalDonationAmount) AS AvgAmount, 
((SELECT MAX(TotalDonationAmount) 
    FROM (SELECT TOP 50 PERCENT TotalDonationAmount 
     FROM #TempDonors 
    ORDER BY TotalDonationAmount) AS BottomHalf) 
+ (SELECT MIN(TotalDonationAmount) 
    FROM (SELECT TOP 50 PERCENT TotalDonationAmount 
     FROM #TempDonors 
     ORDER BY TotalDonationAmount DESC) AS TopHalf))/2 AS MedAmount 
FROM #TempDonors 
WHERE TotalDonationAmount > 0 
GROUP BY CASE WHEN [Criteria1] THEN 'AutoRecurring' 
       WHEN [Criteria2] THEN 'ManualRecurring' 
       ELSE 'NonRecurring' END 

당신의 도움을 사전에 너무 감사드립니다. 이 질문을하는 다른 게시물이있는 경우 (나는 확실히 찾을 수있는 것이 무엇인지 모릅니다), 꼭 링크를 게시하십시오. 미리 찾을 수없는 것에 대해 사과드립니다.

주의하십시오!

답변

0

중간 계산을 외부 쿼리와 상관시켜야합니다.

그것은 다음과 같이 보일 것이다 : 나는 곧 주사를주지

... 
((SELECT MAX(TotalDonationAmount) 
    FROM (SELECT TOP 50 PERCENT TotalDonationAmount 
     FROM #TempDonors t1 
     WHERE CASE WHEN t.[Criteria1] THEN 'AutoRecurring' 
       WHEN t.[Criteria2] THEN 'ManualRecurring' 
       ELSE 'NonRecurring' END=CASE WHEN t1.[Criteria1] THEN 'AutoRecurring' 
       WHEN t1.[Criteria2] THEN 'ManualRecurring' 
       ELSE 'NonRecurring' END 
    ORDER BY TotalDonationAmount) AS BottomHalf) 
+ (SELECT MIN(TotalDonationAmount) 
    FROM (SELECT TOP 50 PERCENT TotalDonationAmount 
     FROM #TempDonors t2 
     WHERE CASE WHEN t.[Criteria1] THEN 'AutoRecurring' 
       WHEN t.[Criteria2] THEN 'ManualRecurring' 
       ELSE 'NonRecurring' END=CASE WHEN t2.[Criteria1] THEN 'AutoRecurring' 
       WHEN t2.[Criteria2] THEN 'ManualRecurring' 
       ELSE 'NonRecurring' END 
     ORDER BY TotalDonationAmount DESC) AS TopHalf))/2 AS MedAmount 
FROM #TempDonors 
WHERE TotalDonationAmount > 0 
GROUP BY CASE WHEN [Criteria1] THEN 'AutoRecurring' 
       WHEN [Criteria2] THEN 'ManualRecurring' 
       ELSE 'NonRecurring' END 
+0

. 감사! – Nhorr