2017-08-25 64 views
2

我有这个sql输出,根据他们的位置给了我同一个人不同的行。如果他们住在那里,我想每人一行,三列Y。每个姓名放一行使用SQL

Select name, Paris, London, NYC from location 

Name  Paris  London  NYC 
John  y   
John     y  
John        y 

我想这

Name  Paris  London  NYc 
John  y   y   y 
+0

这张表里可能会有重复的Johns吗?约翰可能有3个不同的主键,但是是同一个人吗? –

+0

刚刚重读的问题,我误解了对不起! –

+0

这类问题是设计不良的症状。 – Strawberry

回答

-1

使用子选择喜欢:

Select name, 
     (SELECT Paris FROM location WHERE name = a.name), 
     (SELECT London FROM location WHERE name = a.name) 
FROM location a 

这样你做一个选择在选择和再选择链接到覆盖选择的名称。

其他一些用户告诉你使用聚合。 在大多数数据库系统中,聚合查询效率低于子查询,因此应小心使用聚合。

+0

非常感谢你 – user3139937

1

您可以使用最多的功能:

select name, max(paris), max(london), max(nyc) from location 
    group by name 
+0

谢谢你,max work! – user3139937

+0

@ user3139937,欢迎光临。很高兴帮助你:) – adn

-1
SELECT name, 
IF(SUM(IF(Paris='y',1,0)>0,'y','') as Paris, 
IF(SUM(IF(London='y',1,0)>0,'y','') as London, 
IF(SUM(IF(NYC='y',1,0)>0,'y','') as NYC 
FROM location 
GROUP BY name 

侧面说明,数据库没有优化设计! 3个名称,城市和位置适当的连接表会更有效率。

+0

非常感谢 – user3139937

相关问题