Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy zapytanie MySQL może zmienić wiersze w kolumny?

Czasami pierwszym krokiem do rozwiązania problemu jest poznanie jego nazwy. Potem wystarczy po prostu googlować. To, co próbujesz utworzyć, nazywa się tablicą przestawną lub raport krzyżowy . Oto link wyjaśniający, jak tworzyć tabele przestawne w MySQL . A oto bardziej szczegółowy samouczek .

AKTUALIZACJA:

Teraz, gdy zaktualizowałeś pytanie, mam jaśniejszy obraz tego, co próbujesz osiągnąć. Podam Ci alternatywne rozwiązanie, które jest podobne, ale nie dokładnie co chcesz na podstawie GROUP_CONCAT funkcja.

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;

Zweryfikowałem to zapytanie w następujący sposób. Najpierw konfiguracja:

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

A teraz zapytanie i wyniki:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL miesięczna Wyprzedaż z ostatnich 12 miesięcy, w tym miesiące bez wyprzedaży

  2. Jak całkowicie usunąć MySQL 5.7 z systemu Windows?

  3. Jak mogę posortować wynik mysql według listy priorytetowych identyfikatorów?

  4. Wyświetlanie daty z bazy danych PHP

  5. Wybierz wiersze, aż zostanie osiągnięta łączna kwota w kolumnie (mysql)