根据sql中的一列对结​​果进行分组

时间:2011-08-09 07:15:54

标签: sql

我有一个像

这样的sql语句
SELECT column1, column2,column3, column4  FROM table1 GROUP BY column3

 SELECT *  FROM table1 GROUP BY column3

我想要一个根据column3分组的结果,还有其他列。但它给出了一个错误。我该怎么办?感谢..

4 个答案:

答案 0 :(得分:0)

您要做的是未定义的行为。在列上指定GROUP BY时,其他列中可能有多个值。数据库没有明智的方法来确定要显示的值。

PARTITION可能就是你要找的东西。请检查此链接:http://msdn.microsoft.com/en-us/library/ms189461.aspx

答案 1 :(得分:0)

分组适用于SUM()等聚合函数。将个别字段分组是没有意义的。

SELECT SUM(col1), MAX(col2), col3 from t1 group by col3

答案 2 :(得分:0)

如果我理解你的预期最终结果, 尝试使用ORDER而不是GROUP

如果不能给你所需的输出,我道歉。

SELECT column1, column2,column3, column4
  FROM table1
 ORDER BY column3

SELECT *
  FROM table1
 ORDER BY column3

答案 3 :(得分:0)

我没有完全理解你的问题,你需要这个查询,但也许你可以使用这个:

/*t-sql example*/

create table #T (id int identity(1,1), col1 varchar(5), col2 varchar(5), col3 varchar(6))

insert #T (col1,col2,col3) values ('aaa','a1e','group1')
insert #T (col1,col2,col3) values ('bbb','a2e','group1')
insert #T (col1,col2,col3) values ('ccc','a3e','group1')
insert #T (col1,col2,col3) values ('ddd','a4e','group2')
insert #T (col1,col2,col3) values ('eee','a5e','group2')
insert #T (col1,col2,col3) values ('fff','a6e','group3')


select id,col1,col2,#T.col3,subq.cnt from #T
join 
(select col3, COUNT(*) as 'cnt' from #T group by col3) as subq
on 
#T.col3 = subq.col3

我使用了子查询,但您可以使用临时表或WITH。另外,我仅使用“count”进行聚合。

最高