2017-05-22 4 views
0

Ich habe mich gefragt, ob ich bitte Hilfe bei der Durchführung der Medianberechnung für jede DonorType-Gruppe bekommen könnte. Bei der Abfrage habe ich nur einen Median für alle Werte, nicht die Werte für jede Fallgruppierung. Ich habe ein paar Dinge ausprobiert und mich umgesehen, aber ich stecke fest.Need Median zur Gruppenverfolgung Nach Fall

Hier ist, was ich habe:

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 

Vielen Dank im Voraus für Ihre Hilfe. Wenn es einen anderen Post gibt, der das fragt (ich bin mir sicher, dass es da ist, ich weiß einfach nicht, wonach ich suchen soll), poste einfach den Link - ich entschuldige mich im Voraus für meine Unfähigkeit, ihn zu finden.

Vorsicht!

Antwort

0

Sie müssen die Medianberechnung mit der äußeren Abfrage korrelieren.

Es würde wie folgt aussehen:

... 
((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

ich bald dies einen Schuss werden. Vielen Dank! – Nhorr