sum列,显示每行的总数

won*_*t77 7 sql t-sql sql-server-2005

我有一个看起来像这样的查询:

select Group, Sum(columnA) as SumColumn
FROM table
GROUP BY Group
Run Code Online (Sandbox Code Playgroud)

我得到的结果看起来像这样

+-----+---------+
|Group|SumColumn|
+-----+---------+
|A    |10       |
+-----+---------+
|B    |20       |
+-----+---------+
Run Code Online (Sandbox Code Playgroud)

如何更改/添加到此以显示类似的内容?

+-----+---------+-----------+
|Group|SumColumn|TotalColumn|
+-----+---------+-----------+
|A    |10       |30         |
+-----+---------+-----------+
|B    |20       |30         |
+-----+---------+-----------+
Run Code Online (Sandbox Code Playgroud)

Hog*_*gan 8

很难看出你的数据是什么样的 - 但是你发布的内容是你想要的:

SELECT Name, 
       SumColumn,
       SUM(SumColumn) AS TotalColumn
FROM
(
    SELECT Group as Name, SUM(columnA) AS SumColumn
    FROM Table 
    GROUP BY Group
) T
Run Code Online (Sandbox Code Playgroud)

你可能想要这个 - 取决于其他东西.

SELECT *,  
       SUM(columnA) OVER (PARTITION BY Group ORDER BY Group) AS SumColumn,
       SUM(columnA) OVER (PARTITION BY Group) AS TotalColumn
FROM TABLE
Run Code Online (Sandbox Code Playgroud)


Tim*_*ter 5

使用子查询:

SELECT [Group], Sum(columnA) as SumColumn, 
       TotalColumn = (SELECT SUM(columnA) FROM dbo.Table1)
FROM dbo.Table1
GROUP BY [Group]
Run Code Online (Sandbox Code Playgroud)

Demo


Gor*_*off 5

您实际上可以在select语句中混合使用窗口函数和聚合函数。因此,您可以在没有子查询的情况下执行此操作:

select Group, Sum(columnA) as SumColumn,
       sum(sum(columnA)) over () as TotalColumns
FROM table
GROUP BY Group;
Run Code Online (Sandbox Code Playgroud)