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 setiap VehicleID 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!