Les instructions SQL Server Case Statement et Agrégation

J'ai datatables de table suivantes:

SELECT [Quote ID], [Deductible Plan], [Age ID], [Number of Members] FROM finalResult_001 1381 $750 Deductible Plan Age 65 10 1381 $750 Deductible Plan Age 85+ 10 1371 $150 Deductible Plan Age 65 10 1371 $150 Deductible Plan Age 85+ 10 

Je suis à la search du résultat suivant:

 Quote ID Deductible Plan Age 65 Age 85+ 1381 $750 Deductible Plan 10 10 1371 $150 Deductible Plan 10 10 

Je veux Grouper par l'ID de Quote et le Plan Déductible et devrait résumer par la colonne d'âge d'identification, mais je ne suis pas sûr de la façon de le faire, voici mon essai:

 SELECT [Quote ID], [Deductible Plan], case when [Age ID] = 'Age 65' THEN SUM([Number of Members]) else 0 END AS [Age 65], case when [Age ID] = 'Age 85+' THEN SUM([Number of Members]) else 0 END AS [Age 85+] FROM finalResult_001 GROUP BY [Quote ID], [Age ID], [Deductible Plan] 

Le résultat:

 Quote ID Deductible Plan Age 65 Age 85+ 1381 $750 Deductible Plan 0 10 1381 $750 Deductible Plan 10 0 1371 $150 Deductible Plan 0 10 1371 $150 Deductible Plan 10 0 

comment pourrais-je additionner l'identifiant d'âge pour me donner le résultat:

 Quote ID Deductible Plan Age 65 Age 85+ 1381 $750 Deductible Plan 10 10 1371 $150 Deductible Plan 10 10 

Appliquez les CASEs à [Number of Members] plutôt qu'à SUM([Number of Members]) et ne regroupez pas par [Age ID] :

 SELECT [Quote ID], [Deductible Plan], SUM(case when [Age ID] = 'Age 65' THEN [Number of Members] else 0 END) AS [Age 65], SUM(case when [Age ID] = 'Age 85+' THEN [Number of Members] else 0 END) AS [Age 85+] FROM dbo.finalResult_001 GROUP BY [Quote ID], [Deductible Plan] ; 
 DECLARE @t Table (QuoteID INT,Deductible VARCHAR(100),Age INT,AgeID INT) INSERT INTO @t(QuoteID,Deductible,Age,AgeID)values (1381,'$750 Deductible Plan',0,10) INSERT INTO @t(QuoteID,Deductible,Age,AgeID)values (1381,'$150 Deductible Plan',10,0) INSERT INTO @t(QuoteID,Deductible,Age,AgeID)values (1371,'$750 Deductible Plan',0,10) INSERT INTO @t(QuoteID,Deductible,Age,AgeID)values (1371,'$150 Deductible Plan',10,0) ;WITH CTE AS ( SELECT DISTINCT t.QuoteID ,MAX(tt.Age) AA ,MAX(ttt.Ageid) AAA ,ROW_NUMBER() OVER ( PARTITION BY t.Deductible ORDER BY t.Deductible ) RN ,t.Deductible FROM @tt INNER JOIN ( SELECT Age ,QuoteID FROM @t GROUP BY QuoteID ,Deductible ,Age ,AgeID ) tt ON tt.QuoteID = t.QuoteID INNER JOIN ( SELECT AgeID ,QuoteID ,Deductible FROM @t GROUP BY QuoteID ,Deductible ,Age ,AgeID ) ttt ON ttt.QuoteID = t.QuoteID GROUP BY t.QuoteID ,t.Deductible ) SELECT C.QuoteID ,C.Deductible ,C.AA AGE ,C.AAA Age1 FROM Cte C WHERE RN = 1