我有这个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
我有这个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
使用子选择喜欢:
Select name,
(SELECT Paris FROM location WHERE name = a.name),
(SELECT London FROM location WHERE name = a.name)
FROM location a
这样你做一个选择在选择和再选择链接到覆盖选择的名称。
其他一些用户告诉你使用聚合。 在大多数数据库系统中,聚合查询效率低于子查询,因此应小心使用聚合。
非常感谢你 – user3139937
您可以使用最多的功能:
select name, max(paris), max(london), max(nyc) from location
group by name
谢谢你,max work! – user3139937
@ user3139937,欢迎光临。很高兴帮助你:) – adn
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个名称,城市和位置适当的连接表会更有效率。
非常感谢 – user3139937
这张表里可能会有重复的Johns吗?约翰可能有3个不同的主键,但是是同一个人吗? –
刚刚重读的问题,我误解了对不起! –
这类问题是设计不良的症状。 – Strawberry