Ajouter une ligne récapitulative avec les totaux

Je sais que cela semble fou et ne devrait probablement pas être fait de cette façon, mais j'ai besoin de quelque chose comme ça – J'ai un dossier de SELECT [Type], [Total Sales] From Before

Je veux append une ligne supplémentaire à la fin pour montrer la sum à la fin de la table (après). Cela pourrait-il être fait?

entrez la description de l'image ici

Si vous utilisez SQL Server 2008 ou version ultérieure, vous pouvez utiliser la fonction ROLLUP() GROUP BY:

 SELECT Type = ISNULL(Type, 'Total'), TotalSales = SUM(TotalSales) FROM atable GROUP BY ROLLUP(Type) ; 

Cela suppose que la colonne Type ne peut pas avoir des valeurs NULL et que la valeur NULL dans cette requête indiquerait la ligne de cumul, celle avec le total général. Cependant, si la colonne Type peut avoir des valeurs NULL, le type de comptabilité le plus approprié pour la ligne totale serait comme dans la réponse de @ Declan_K, c'est-à-dire en utilisant la fonction GROUPING() :

 SELECT Type = CASE GROUPING(Type) WHEN 1 THEN 'Total' ELSE Type END, TotalSales = SUM(TotalSales) FROM atable GROUP BY ROLLUP(Type) ; 

C'est la syntaxe de groupement / rollup plus puissante que vous voudrez utiliser dans SQL Server 2008+. Toujours utile pour spécifier la version que vous utilisez afin que nous n'ayons pas à deviner.

 SELECT [Type] = COALESCE([Type], 'Total'), [Total Sales] = SUM([Total Sales]) FROM dbo.Before GROUP BY GROUPING SETS(([Type]),()); 

Craig Freedman a écrit un excellent article de blog présentant GROUPING SETS .

Essayez d'utiliser union all comme ci-dessous

 SELECT [Type], [Total Sales] From Before union all SELECT 'Total', Sum([Total Sales]) From Before 

Si vous avez un problème avec la command, comme je l'ai suggéré, essayez ceci:

 select [Type], [Total Sales] from (SELECT [Type], [Total Sales], 0 [Key] From Before union all SELECT 'Total', Sum([Total Sales]), 1 From Before) sq order by [Key], Type 

Vous pouvez utiliser l'opérateur ROLLUP

 SELECT CASE WHEN (GROUPING([Type]) = 1) THEN 'Total' ELSE [Type] END AS [TYPE] ,SUM([Total Sales]) as Total_Sales From Before GROUP BY [Type] WITH ROLLUP