2017-08-25 5 views
2

私は、この人の場所に基づいて同じ人のために異なる行を与えるこのSQLの出力を持っています。彼らがそこに住んでいれば、私は一人あたり一本の線とYの三本の列が必要でした。SQLを使用して名前ごとに1行を入力する

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

この表に重複したジョンが潜在的に存在しますか? Johnは潜在的に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

ありがとうございました。 – 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

関連する問題