sql >> Databasteknik >  >> RDS >> Mysql

Kan en MySQL-fråga förvandla rader till kolumner?

Ibland är det första steget för att lösa ditt problem att veta vad det heter. Efter det är det bara att googla. Det du försöker skapa kallas en pivottabell eller korstabellrapport . Här är en länk som förklarar hur man skapar pivottabeller i MySQL . Och här är en mer djupgående handledning .

UPPDATERING:

Nu när du har uppdaterat frågan har jag en tydligare uppfattning om vad du försöker åstadkomma. Jag ska ge dig en alternativ lösning som är liknande men inte exakt vad du vill ha baserat på MySQL:s GROUP_CONCAT 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;

Jag har verifierat denna fråga enligt följande. Först inställningen:

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);

Och nu frågan och resultaten:

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)


  1. 10 bästa startups i molnet – 2018

  2. SQL LocalDB vs SQL Server CE

  3. Vad är skillnaden mellan ROWNUM och ROW_NUMBER i en Oracle-databas?

  4. MySQL kontrollera om två datumintervall överlappar med indata