SQL ne sera pas complètement groupé

J'ai un code SQL qui fonctionnait à l'origine très bien, mais ensuite j'ai dû append un nouvel élément à un CAS, maintenant mon GROUP BY ne se regroupera pas complètement comme avant et cela gâche mes calculs. Je ne veux même pas grouper par la date complétée, c'est juste là pour un cas, mais mon code explose si je ne l'ai pas là.

EDIT: Le code original a bien fonctionné, mais j'ai dû append la date complétée afin que je puisse append un CAS, puis des erreurs si je ne l'ajoute pas au GROUP BY, donc je l'ai ajouté et maintenant il ne regroupe pas comme il l'a fait dans le code d'origine. Ce que ce code fait, c'est prendre un tas d'informations à partir d'autres tables, il calcule ce que quelqu'un doit, combien paie et crache la différence.

CODE ORIGINAL

INSERT INTO #ThisReportAll (CustomerID,Year,OverdueBalance,YearSetupId) SELECT t.CustomerId, ys.Name AS Year,SUM(t.TtlSpeciesCost) - Isnull(cp.TtlPayments,0) + Isnull(ba.Amount,0) AS TtlOwnerCost, t.YearSetupId AS YearSetupId FROM #TotalAnimalCostAll t LEFT JOIN #CustomerPaymentsAll cp ON t.CustomerId=cp.CustomerID LEFT JOIN YearSetup ys ON t.YearSetupId = ys.YearSetupId LEFT JOIN #BalanceAdjustmentsAll ba ON t.CustomerId=ba.CustomerID GROUP BY t.CustomerId,ys.Name,cp.TtlPayments, ba.Amount, t.YearSetupId 

Nouveau code qui ne fonctionne pas tout le path

 INSERT INTO #ThisReportAll (CustomerID,Year,OverdueBalance,YearSetupId) SELECT t.CustomerId, ys.Name AS Year, CASE WHEN SUM(t.TtlSpeciesCost) < 5 AND t.Complete < CONVERT(DATE,'01-01-2017') THEN (5) - Isnull(cp.TtlPayments,0) + Isnull(ba.Amount,0) ELSE SUM(t.TtlSpeciesCost) - Isnull(cp.TtlPayments,0) + Isnull(ba.Amount,0) END AS TtlOwnerCost, t.YearSetupId AS YearSetupId FROM #TotalAnimalCostAll t LEFT JOIN #CustomerPaymentsAll cp ON t.CustomerId=cp.CustomerID LEFT JOIN YearSetup ys ON t.YearSetupId = ys.YearSetupId LEFT JOIN #BalanceAdjustmentsAll ba ON t.CustomerId=ba.CustomerID GROUP BY t.CustomerId,ys.Name,cp.TtlPayments, ba.Amount, t.YearSetupId, t.Complete 

Si vous ne voulez pas que Complete affecte votre GROUP BY vous devez faire votre CASE dans une sous-requête qui ne sélectionne pas Complete . Ensuite, vous n'avez pas ce champ supplémentaire dans datatables que vous regroupez. Comme ça:

 SELECT [whatever fields] from ( SELECT t.CustomerId, ys.Name AS Year, CASE WHEN SUM(t.TtlSpeciesCost) < 5 AND t.Complete < CONVERT(DATE,'01-01-2017') THEN (5) - Isnull(cp.TtlPayments,0) + Isnull(ba.Amount,0) ELSE SUM(t.TtlSpeciesCost) - Isnull(cp.TtlPayments,0) + Isnull(ba.Amount,0) END AS TtlOwnerCost, t.YearSetupId AS YearSetupId FROM #TotalAnimalCostAll t LEFT JOIN #CustomerPaymentsAll cp ON t.CustomerId=cp.CustomerID LEFT JOIN YearSetup ys ON t.YearSetupId = ys.YearSetupId LEFT JOIN #BalanceAdjustmentsAll ba ON t.CustomerId=ba.CustomerID ) as a GROUP BY a.CustomerId, a.Name,a.TtlPayments, a.Amount, a.YearSetupId 

Je vois que vous êtes également en t.Complete de grouper par t.Complete dans le nouveau code, mais pas dans le code d'origine. Vos résultats doivent en tenir count, sinon ils auront tort.

Il me semble également étrange que Isnull(cp.TtlPayments,0) + Isnull(ba.Amount,0) sont dans votre instruction CASE, mais ne sont pas des agrégats lorsque l'instruction utilise des SUM dans d'autres endroits.