2014-06-30 88 views
1
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 

我想^表就像这样一个^。sql group by values from two columns

我试过说Select * FROM TableA GROUP BY City ='D', City = 'J' City = 'C'但是那么名称并没有像上面显示的那样?我将如何实现这一目标?或者,你如何按列值进行组合并对名称进行排序。 ?

+0

你想它看起来像左表还是右表? – Tanner

+0

按城市排列,含案例陈述 –

+4

D,J,C,Maria之后,汉族之后,Frik之前,D怎么样?请解释你想要的排序顺序。 –

回答

0
select * from TableA ORDER BY City,Person 

这应该工作,如果你想根据城市,然后按人排序,但从你的输出我看不到任何排序。

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

对于自定义排序或排序基于某些规则,可以通过子句中下列方式使用case语句的顺序和执行它

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

你可以尝试这个 ?

+0

请问您可以详细解释为什么这是一个很好的解决方案。 –

+0

你想要自定义的排序,这是不自然的,所以使它自然秩序,即1,2,3和排序 –

+0

你能编辑你的答案,并把这些额外的信息。 –

0

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

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

您或许可以解释如何通过定义排序顺序来解决订购问题。 – pushpraj

+0

@pushpraj 我使用了MySQL 的CASE函数,我提供的解决方案是当City等于'D'时,它将是第一个如果City ='C'的人,那么它将是第二个ELSE它将是最后的 – wrecklez

+1

伟大的,包括你的答案,以使其更容易解释。 – pushpraj