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 disque de SELECT [Type], [Total Sales] From Before
Je veux ajouter une ligne supplémentaire à la fin pour afficher le SOMME à la fin du tableau (Après). Cela pourrait-il être fait?
Si vous utilisez SQL Server 2008 ou une 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 de valeur NULL et que la valeur NULL de cette requête indique la ligne de cumul, celle avec le total général. Cependant, si la colonne Type
peut avoir sa propre valeur NULL, le type de comptabilisation le plus approprié pour la ligne de total serait comme dans la réponse de @Declan_K, c’est-à-dire en utilisant le GROUPING()
fonction:
SELECT
Type = CASE GROUPING(Type) WHEN 1 THEN 'Total' ELSE Type END,
TotalSales = SUM(TotalSales)
FROM atable
GROUP BY ROLLUP(Type)
;
Il s'agit de la syntaxe de regroupement/correctif la plus puissante que vous souhaiterez utiliser dans SQL Server 2008+. Il est toujours utile de spécifier la version que vous utilisez pour ne pas avoir à deviner.
SELECT
[Type] = COALESCE([Type], 'Total'),
[Total Sales] = SUM([Total Sales])
FROM dbo.Before
GROUP BY GROUPING SETS(([Type]),());
Craig Freedman a écrit n 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 commande, comme i-one suggéré d'essayer 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