Cara Efisien Menggabungkan
Beberapa Baris di SQL Server ke dalam Satu Field Terbatas
Dalam manajemen basis data, terutama ketika berurusan dengan basis data relasional seperti SQL Server, Anda sering menemukan skenario di mana Anda perlu menggabungkan beberapa baris menjadi satu field untuk meningkatkan keterbacaan dan pemrosesan yang lebih sederhana. Pos blog ini akan membahas bagaimana menyelesaikan masalah ini menggunakan fungsi SQL Server, mengilustrasikan hasil yang diinginkan dan solusi efektif untuk berbagai versi SQL Server.
Pernyataan Masalah
Bayangkan Anda memiliki dua tabel: Vehicles
dan Locations
. Berikut adalah contoh singkat tentang bagaimana tampilan tabel-tabel ini:
Tabel Vehicles
VehicleID | Name |
---|---|
1 | Chuck |
2 | Larry |
Tabel Locations
LocationID | VehicleID | City |
---|---|---|
1 | 1 | New York |
2 | 1 | Seattle |
3 | 1 | Vancouver |
4 | 2 | Los Angeles |
5 | 2 | Houston |
Tujuannya adalah menarik data dengan cara yang menunjukkan nama setiap kendaraan bersamaan dengan daftar lokasi terkait. Hasil yang diinginkan harus terlihat seperti ini:
VehicleID | Name | Locations |
---|---|---|
1 | Chuck | New York, Seattle, Vancouver |
2 | Larry | Los Angeles, Houston |
Meskipun Anda bisa mencapai ini melalui kueri rumit dan pemrograman, kita memerlukan solusi yang menyederhanakan proses.
Solusi: Menggunakan Fungsi SQL Server
Metode 1: Menggunakan FOR XML PATH
Jika Anda menggunakan SQL Server 2005 atau lebih baru, salah satu metode paling efektif untuk mencapai penggabungan ini adalah perintah FOR XML PATH
. Berikut adalah cara untuk mengimplementasikannya:
SELECT [VehicleID],
[Name],
(STUFF((SELECT ', ' + [City] AS [text()]
FROM [Location]
WHERE (VehicleID = Vehicle.VehicleID)
FOR XML PATH('')), 1, 2, '')) AS Locations
FROM [Vehicle]
Penjelasan:
- Pernyataan
SELECT
di dalam mengambil lokasi untuk setiapVehicleID
dan menggabungkannya menjadi satu string. FOR XML PATH('')
memungkinkan kita menghasilkan satu string XML dari beberapa baris yang dikembalikan oleh subquery.STUFF
digunakan untuk menghapus koma dan spasi awal dari string yang telah digabung.
Metode 2: Menggunakan STRING_AGG (SQL Server 2017 dan Lebih Baru)
Bagi mereka yang menggunakan SQL Server 2017 atau yang lebih baru, ada cara yang bahkan lebih sederhana untuk mencapai ini menggunakan fungsi STRING_AGG
. Berikut adalah tampilannya:
SELECT [VehicleID],
[Name],
(SELECT STRING_AGG([City], ', ')
FROM [Location]
WHERE VehicleID = V.VehicleID) AS Locations
FROM [Vehicle] V
Penjelasan:
STRING_AGG
mengambil dua argumen: kolom yang ingin Anda agregat, dan pemisah yang ingin Anda gunakan untuk memisahkan entri. Ini jauh lebih jelas dan efisien daripada metode sebelumnya.
Kesimpulan
Menggabungkan beberapa baris menjadi satu field terbatas di SQL Server dapat secara signifikan meningkatkan keterbacaan dan aksesibilitas data Anda. Apakah Anda menggunakan versi yang lebih lama dengan FOR XML PATH
atau dapat menggunakan STRING_AGG
di versi yang lebih baru, SQL Server menyediakan alat yang Anda butuhkan untuk mengelola data Anda dengan efisien.
Dengan memahami teknik-teknik ini, Anda dapat menyederhanakan kueri SQL Anda, membuatnya lebih mudah dibaca, dipelihara, dan dimodifikasi di masa depan. Selalu pilih metode yang paling sesuai dengan versi SQL Server Anda dan kebutuhan spesifik Anda.
Jika Anda memiliki pertanyaan atau memerlukan klarifikasi lebih lanjut tentang metode ini, silakan bertanya di komentar di bawah!