SQL Server组通过子句问题



假设我有一个查询

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

最新更新