Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara memutar? Bagaimana cara mengubah beberapa baris menjadi satu baris dengan banyak kolom?

Edisi MySQL

Berikut adalah kuerinya. Kueri yang digabungkan menghasilkan RowNumber (1,2,3,...) untuk setiap produk di dalam setiap grup klien menggunakan Fitur MySQL Variabel Buatan Pengguna . Kueri luar membentuk tabel PIVOT menggunakan GROUP BY dan KASUS dengan Nomor Baris dari tabel bagian dalam. Jika Anda perlu mengubah jumlah kolom produk, pertimbangkan untuk membuat kueri ini dinamis dengan menambahkan MAX(CASE WHEN p.RowNum=X THEN p.Product END) as ProductX ke daftar pilihan.

select Clients.ClientName,
       MAX(CASE WHEN p.RowNum=1 THEN p.Product END) as Product1,
       MAX(CASE WHEN p.RowNum=2 THEN p.Product END) as Product2,
       MAX(CASE WHEN p.RowNum=3 THEN p.Product END) as Product3,
       MAX(CASE WHEN p.RowNum=4 THEN p.Product END) as Product4


FROM Clients
JOIN
(
  SELECT Products.*,
       if(@ClientId<>ClientId,@rn:=0,@rn),
       @ClientId:=ClientId,
       @rn:[email protected]+1 as RowNum

  FROM Products, (Select @rn:=0,@ClientId:=0) as t
  ORDER BY ClientId,ProductID
 ) as P 
   ON Clients.ClientId=p.ClientId

GROUP BY Clients.ClientId

Demo SQLFiddle

Edisi SQL Server:

select Clients.ClientId,
       MAX(Clients.ClientName),
       MAX(CASE WHEN p.RowNum=1 THEN p.Product END) as Product1,
       MAX(CASE WHEN p.RowNum=2 THEN p.Product END) as Product2,
       MAX(CASE WHEN p.RowNum=3 THEN p.Product END) as Product3,
       MAX(CASE WHEN p.RowNum=4 THEN p.Product END) as Product4


FROM Clients
JOIN
(
  SELECT Products.*,
       ROW_NUMBER() OVER (PARTITION BY ClientID ORDER BY ProductID) 
         as RowNum

  FROM Products
 ) as P 
   ON Clients.ClientId=p.ClientId
GROUP BY Clients.ClientId

Demo SQLFiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menggunakan banyak database untuk satu aplikasi Rails 3.1 di Heroku?

  2. Kolom tidak dikenal di 'memiliki klausa'

  3. MAKEDATE() Contoh – MySQL

  4. Cara melihat kesalahan kueri di PDO PHP

  5. Xampp:browser web tidak akan menampilkan halaman localhost