Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara membuat fungsi SQL Server untuk menggabungkan beberapa baris dari subquery ke dalam satu bidang yang dibatasi?

Jika Anda menggunakan SQL Server 2005, Anda dapat menggunakan perintah FOR XML PATH.

SELECT [VehicleID]
     , [Name]
     , (STUFF((SELECT CAST(', ' + [City] AS VARCHAR(MAX)) 
         FROM [Location] 
         WHERE (VehicleID = Vehicle.VehicleID) 
         FOR XML PATH ('')), 1, 2, '')) AS Locations
FROM [Vehicle]

Ini jauh lebih mudah daripada menggunakan kursor, dan tampaknya bekerja dengan cukup baik.

Perbarui

Bagi siapa saja yang masih menggunakan metode ini dengan versi SQL Server yang lebih baru, ada cara lain untuk melakukannya yang sedikit lebih mudah dan lebih berperforma menggunakanSTRING_AGG metode yang telah tersedia sejak SQL Server 2017.

SELECT  [VehicleID]
       ,[Name]
       ,(SELECT STRING_AGG([City], ', ')
         FROM [Location]
         WHERE VehicleID = V.VehicleID) AS Locations
FROM   [Vehicle] V

Ini juga memungkinkan pemisah yang berbeda untuk ditetapkan sebagai parameter kedua, memberikan sedikit lebih banyak fleksibilitas dibandingkan metode sebelumnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menulis file csv ke database SQL Server menggunakan python

  2. Hapus Acara dari Database Mail Log di SQL Server (T-SQL)

  3. Fungsi COALESCE di TSQL

  4. Tambahkan kolom tabel baru ke posisi ordinal tertentu di Microsoft SQL Server

  5. Sisipkan bidang lebar tetap secara massal