sql group by two columns中的值

时间:2014-06-30 08:59:58

标签: sql sql-server select sql-order-by case

City | Person           City | Person
--------------          -------------
C    | Fanie            D    | Jan
C    | Johannes         D    | Maria
C    | Anna      to     J    | Frik
D    | Jan              C    | Anna    
D    | Maria            C    | Fanie  
J    | Frik             C    | Johannes 

我希望^ table就像这个^。

我试图说Select * FROM TableA GROUP BY City ='D', City = 'J' City = 'C',但是名字不是如上所示的顺序?我怎么做到这一点?或者如何按列值进行聚类并对名称进行排序。 ?

4 个答案:

答案 0 :(得分:1)

试试这个:

SELECT City, Person
FROM TableA
WHERE City IN ('C', 'D', 'J')
ORDER BY
    (CASE City
        WHEN 'D' THEN 1
        WHEN 'J' THEN 2
        WHEN 'C' THEN 3
        ELSE 4 END),
    Person;

答案 1 :(得分:1)

对于自定义排序或基于某些规则的排序,可以按以下方式按顺序使用case语句并执行它

Select * FROM TableA order by case when city ='D' then 1
when city ='J' then 2 else 3 end, Person

你能试试吗?

答案 2 :(得分:0)

select * from TableA ORDER BY City,Person

如果您想按城市排序,然后按人员排序,这应该有效,但是从您的输出中我看不到任何排序。

答案 3 :(得分:0)

我不知道为什么你需要这样做我希望这会对你有所帮助!  我使用MySQL的CASE功能我提供的解决方案是当城市等于'D'时它将是第一个排序然后如果City ='C'那么它将是第二个ELSE它将是最后一个

SELECT * FROM TableA GROUP BY City,Person ORDER BY CASE WHEN City = 'D' THEN 1 WHEN 'C' THEN 2 ELSE 3 END