2013-01-03 58 views
0

我有一个表,看起来像下面这个简单的例子。我想打一个select语句 显示所有的记录,每一个不同的类别(升序)gouped,每个类别组的成员应该按字母顺序水果名称进行排序:GROUP BY类别和订单类别

ID  Fruit  Category 
_________________________________________ 
1   Apple  200 
2   Pear   200 
3   Banana  300 
4   Peach  300 
5   Mango  300 
6   Tomato  600 
7   Cucomber  600 
8   Jackfruit 300 
9   Salad  600 
10   Cranberries 200   

我想不出如何在SELECT中结合ORDER BY和GROUP BY。 任何帮助将被认为。

谢谢。

编辑: 这是我期待的输出:

ID  Fruit  Category 
_________________________________________ 
1   Apple  200 
10   Cranberries 200 
2   Pear   200 
3   Banana  300 
8   Jackfruit 300 
5   Mango  300 
4   Peach  300 
7   Cucomber  600 
9   Salad  600 
6   Tomato  600 
+1

如果你谈论的是结合所有将每个类别的行分成一行,你真的不应该在SQL中这样做。否则,为什么只按类别排序,然后按水果排序? –

+0

你能显示你期望的输出吗? –

+0

用预期输出编辑的文章 – micknt

回答

-1
SELECT * 
FROM table_name 
GROUP BY category 
ORDER BY category ASC 
+0

你不能由使用的查询SELECT * FROM组的结果集。 – hkutluay

+1

我认为@hkutluay语句的解释是:像“在SQL Server(和标准SQL),你必须列出在GROUP BY子句对选择列表中的非集合列的,除非你使用MySQL或其他通常不适用的条件。此外,尽管您确保类别按顺序排列,但名称并非如此。 GROUP BY子句实际上是多余的;一个ORDER BY子句是所有需要的。 –

7
select* from table_name order by category asc, fruit 
2

您可以使用此。

select* from table_name order by column_name asc // use your column name 
+2

欢迎来到Stack Overflow。麻烦的是,应该在排序中使用两列,而不是一列。另外,问题中给出了列名(但不包括表名!)。 –

1

如前所述,此处不需要GROUP BY。 GROUP BY用于聚合行。例如:

SELECT category, count(category) as [count] from myTable GROUP BY category 

会给你这样的事情

category count 
-------- ----- 
200   3 
300   4 
600   3 

你只是想通过两列顺序,使所有你需要的是

SELECT * FROM myTable ORDER BY Fruit, Category