Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kann eine MySQL-Abfrage Zeilen in Spalten umwandeln?

Manchmal besteht der erste Schritt zur Lösung Ihres Problems darin, zu wissen, wie es heißt. Danach heißt es nur noch googeln. Was Sie zu erstellen versuchen, wird als Pivot-Tabelle bezeichnet oder Kreuztabellenbericht . Hier ist ein Link, der erklärt, wie man Pivot-Tabellen in MySQL erstellt . Und hier ist ein ausführlicheres Tutorial .

AKTUALISIERUNG:

Nachdem Sie die Frage aktualisiert haben, habe ich eine klarere Vorstellung davon, was Sie erreichen möchten. Ich gebe Ihnen eine alternative Lösung, die ähnlich, aber nicht genau ist was Sie wollen, basierend auf GROUP_CONCAT von MySQL Funktion.

select t1.FirstName, t1.LastName, group_concat(concat(t2.FirstName, ' ', t2.LastName))
from member_information as t1
left outer join member_dependent_information as t2 on t2.MemberID=t1.MemberID
group by t1.MemberID;

Ich habe diese Abfrage wie folgt überprüft. Zuerst die Einrichtung:

create table member_information (
    MemberID int unsigned auto_increment primary key,
    FirstName varchar(32) not null,
    LastName varchar(32) not null
) engine=innodb;

create table member_dependent_information (
    MemberID int unsigned not null,
    FirstName varchar(32) not null,
    LastName varchar(32) not null,
    Type int unsigned not null,
    foreign key (MemberID) references member_information(MemberID)
) engine=innodb;

insert into member_information (MemberID, FirstName, LastName) values
(1, 'John', 'Harris'),
(2, 'Sarah', 'Thompson'),
(3, 'Zack', 'Lewis');

insert into member_dependent_information (MemberID, FirstName, LastName, `Type`) values
(1, 'Amy', 'Harris', 1),
(2, 'Bryan', 'Thompson', 1),
(2, 'Dewey', 'Thompson', 2),
(2, 'Tom', 'Thompson', 2),
(3, 'Harry', 'Lewis', 2),
(3, 'Minka', 'Lewis', 1);

Und jetzt die Abfrage und Ergebnisse:

mysql> select t1.FirstName, t1.LastName, group_concat(concat(t2.FirstName, ' ', t2.LastName))from member_information as t1
    -> left outer join member_dependent_information as t2 on t2.MemberID=t1.MemberID
    -> group by t1.MemberID;
+-----------+----------+------------------------------------------------------+
| FirstName | LastName | group_concat(concat(t2.FirstName, ' ', t2.LastName)) |
+-----------+----------+------------------------------------------------------+
| John      | Harris   | Amy Harris                                           | 
| Sarah     | Thompson | Bryan Thompson,Dewey Thompson,Tom Thompson           | 
| Zack      | Lewis    | Harry Lewis,Minka Lewis                              | 
+-----------+----------+------------------------------------------------------+
3 rows in set (0.00 sec)