2017-05-22 7 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

関連する問題