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