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)
很难看出你的数据是什么样的 - 但是你发布的内容是你想要的:
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)
使用子查询:
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)
您实际上可以在select语句中混合使用窗口函数和聚合函数。因此,您可以在没有子查询的情况下执行此操作:
select Group, Sum(columnA) as SumColumn,
sum(sum(columnA)) over () as TotalColumns
FROM table
GROUP BY Group;
Run Code Online (Sandbox Code Playgroud)