SQL Server Group by子句问题

时间:2018-03-28 11:03:07

标签: sql sql-server

假设我有一个查询

select id, sum(col1), col2, col3, ......... col10 
from table 

如果我在没有group by子句的情况下运行它会发出错误

  

专栏' dbo.table.id'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

如果我使用group by子句

select id, sum(col1), col2, col3, ......... col10 
from table 
group by col4

再次出现同样的错误

  

专栏' dbo.table.id'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

直到我还没有指定那些没有在其上实现任何聚合函数的列。

现在我无法在我的所有列上应用聚合函数,或者我必须在group by子句中明确包含我的所有列

2 个答案:

答案 0 :(得分:1)

我不确定你想要实现的目标。 至于您的第一个查询,如果您使用分析函数,则可以在不对行进行分组的情况下获取SUM:

select id,
       sum(col1) over () as sum_col1, -- here you have the analytic function
       col2,
       col3,
       ......... col10 
  from table 

这样,您仍然可以获得表中的所有行,但是在每一行中,您将获得col1的总和。

如果你将分区by子句添加到分析函数,你也可以得到col4的总和(对于你的第二个查询):

select id,
       sum(col1) over (partition by col4) as sum_col1,
       col2,
       col3,
       ......... col10 
  from table 

您仍将获得相同数量的行,但总和将按col4分组。

答案 1 :(得分:0)

您可以使用join来获取所有列

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