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

Pilih kembali daftar yang dibatasi koma yang dikelompokkan berdasarkan ID

select ET1.EntryID,
       (
       select ', '+T.Name
       from Tags as T
         inner join EntryTag as ET2
           on T.TagID = ET2.TagID
       where ET1.EntryID = ET2.EntryID
       for xml path(''), type
       ).value('substring(text()[1], 3)', 'varchar(max)') as TagsCommaDelimited
from EntryTag as ET1
group by ET1.EntryID

Membedah kueri

Kueri utama melakukan group by jadi Anda hanya mendapatkan satu baris untuk setiap EntryID .

Kolom TagsCommaDelimited dibuat dengan subquery yang berkorelasi.

Di SQL Server for xml path digunakan untuk membuat representasi XML dari hasil kueri. Anda memiliki kontrol yang baik atas cara XML dibuat dengan menggunakan alias kolom dan parameter ke path dan root .

Nilai gabungan ', '+T.Name di subquery terkait tidak akan memiliki nama kolom dan parameter kosong ke for xml path('') membuat xml tanpa tag sama sekali. Hanya akan ada satu nilai teks yang dikembalikan.

Saat Anda menambahkan type ke for xml kueri tipe datanya adalah XML .

Untuk mendapatkan nilai dari XML, Anda harus menggunakan value() metode. Anda dapat menggunakan string tetapi jika Anda melakukannya, misalnya, Anda akan mendapatkan & dalam string di mana pun Anda telah menggunakan & .

Parameter pertama di value() function adalah ekspresi xQuery yang digunakan untuk mendapatkan nilai yang Anda inginkan. Gunakan text() untuk menentukan bahwa Anda hanya menginginkan nilai untuk elemen saat ini. [1] memberi tahu SQL Server bahwa Anda ingin simpul teks pertama ditemukan (Anda hanya memiliki satu di sini) tetapi masih diperlukan.

String yang dibuat oleh for xml kueri memiliki koma tambahan dan spasi di awal string dan itu perlu dihapus. Disini saya menggunakan fungsi XQuery substring untuk mendapatkan semuanya kecuali dua karakter pertama.

Parameter kedua untuk value() menentukan tipe data yang harus dikembalikan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Statistik Database Pembaruan SQL Server

  2. Cara Instal sqlcmd &bcp di Red Hat

  3. Bagaimana Fungsi SPACE() Bekerja di SQL Server (T-SQL)

  4. Cara Menautkan Access Database ke SQL Server di Access 2016

  5. String Format Tanggal/Waktu Standar Didukung oleh FORMAT() di SQL Server