假设我有一个查询
select id, sum(col1), col2, col3, ......... col10
from table
如果我在没有分组的情况下运行此程序,则会给出一个错误
列'dbo.table.id'在选择列表中无效,因为它不包含在聚合函数中,或者由子句中的组中包含。
。
如果我使用group by Ly Crause
select id, sum(col1), col2, col3, ......... col10
from table
group by col4
再次发生同一错误
列'dbo.table.id'在选择列表中无效,因为它不包含在聚合函数中,或者由子句中的组中包含。
。
直到我还没有指定所有尚未在其上实现任何汇总功能的列。
现在,我不能在所有列上应用一个汇总功能,或者我必须将所有列中的所有列纳入组中的所有列
我不确定您要实现什么。至于您的第一个查询,如果您使用分析功能,则可以在不分组行的情况下获得总和:
select id,
sum(col1) over () as sum_col1, -- here you have the analytic function
col2,
col3,
......... col10
from table
这样,您仍然将所有行都放在表中,但是在每一行中,您都会有Col1的总和。
,如果您通过子句添加一个分区函数,也可以拥有COL4的总和(至于第二个查询(:
:select id,
sum(col1) over (partition by col4) as sum_col1,
col2,
col3,
......... col10
from table
您仍然会得到相同数量的行,但总和将由col4分组。
您可以使用加入获取所有列
Select id, col2,col3, ......... col10,sumcol1
From table t1 inner join
(
select sum(col1) as sumcol1, col4 as coln4 from table
group by col4
) t2
on
t1.col4 =t2.coln4