0

SQLを使用して一連の結果を並べ替え/グループ化しようとしています。いくつかのフィールドがあり(たとえば、少し具体的でない名前に変更されています)、レコードの各論理グループには、一定のままのフィールド(アドレスフィールド)があります。各アドレスに存在するフィールドもあります。これらはすべてのアドレスで同じです。

id  forename    surname     address
1   John        These       Address1
2   Lucy        Values      Address1
3   Jenny       Are         Address1
4   John        All         Address2
5   Lucy        Totally     Address2
6   Jenny       Different   Address2
7   Steve       And         Address2
8   Richard     Blah        Address2

address     John    Lucy            Jenny       Steve       Richard
Address1        These   Values          Are         (null)      (null)
Address2        All     Totally         Different   And         Blah

例:John、Lucy、Jenny、Steve、Richardが各アドレスで可能な唯一の名前です。別の場所に保管されているので、私はこれを知っています。

左側の画像の実際のレコードから値を選択して、右側のような結果セットとして返すことはできますか?それが違いを生むなら、私はMySQLを使用しています。

4

3 に答える 3

1

列見出し「john」、「lucy」などが固定されていると仮定すると、住所フィールドでグループ化し、集約演算子と組み合わせた if() 関数を使用して結果を取得できます。

select max(if(forename='john',surname,null)) as john,
       max(if(forename='lucy',surname,null)) as lucy,
       max(if(forename='jenny',surname,null)) as jenny,       
       max(if(forename='steve',surname,null)) as steve,       
       max(if(forename='richard',surname,null)) as richard,
       address
from tablename 
group by address;

それは少しもろいです。

同様のことを行うために (制限内で) 使用できる group_concat 関数もありますが、必要に応じて、列単位ではなく行単位で並べ替えられます。

例えば。

select address, group_concat( concat( forename, surname ) ) tenants 
from tablename
group by address;
于 2008-11-14T11:36:44.910 に答える
0

よくわかりませんが、あなたがやろうとしているのはGROUPBYだと思います。

SELECT Address,Name FROM Table GROUP BY Name

さらに列を選択する場合は、それらがGROUPBY句に含まれていることを確認してください。また、MAX()やCOUNT()などの集計関数を実行できるようになりました。

于 2008-11-14T09:55:01.667 に答える
0

質問についてはよくわかりませんが、私が理解していることから、あなたは次のことができます。

SELECT concat(column1,column2,column3) as main_column, address from table;
于 2008-11-14T09:55:13.460 に答える