Bagaimana saya mendapatkan:
id Name Value
1 A 4
1 B 8
2 C 9
untuk
id Column
1 A:4, B:8
2 C:9
Bagaimana saya mendapatkan:
id Name Value
1 A 4
1 B 8
2 C 9
untuk
id Column
1 A:4, B:8
2 C:9
GROUP_CONCAT()
fungsi agregatnya, tetapi menyelesaikannya pada Microsoft SQL Server lebih canggung. Lihat pertanyaan SO berikut untuk mendapatkan bantuan: " Bagaimana cara mendapatkan beberapa catatan terhadap satu catatan berdasarkan hubungan? "Jawaban:
Tidak diperlukan CURSOR, WHILE loop, atau Function-Defined User .
Hanya perlu berkreasi dengan FOR XML dan PATH.
[Catatan: Solusi ini hanya berfungsi pada SQL 2005 dan yang lebih baru. Pertanyaan asli tidak menentukan versi yang digunakan.]
sumber
Jika SQL Server 2017 atau SQL Server Vnext, SQL Azure Anda dapat menggunakan string_agg seperti di bawah ini:
sumber
menggunakan jalur XML tidak akan digabungkan sempurna seperti yang Anda harapkan ... itu akan menggantikan "&" dengan "& amp;" dan juga akan mengacaukan
<" and ">
... mungkin beberapa hal lain, tidak yakin ... tetapi Anda dapat mencoba iniSaya menemukan solusi untuk ini ... Anda perlu mengganti:
dengan:
... atau
NVARCHAR(MAX)
jika itu yang Anda gunakan.kenapa sih tidak
SQL
memiliki fungsi agregat gabungan? ini adalah PITA.sumber
Aku berlari ke dalam beberapa masalah ketika saya mencoba mengkonversi saran Kevin Fairchild untuk bekerja dengan string yang mengandung spasi dan karakter XML khusus (
&
,<
,>
) yang dikodekan.Versi terakhir dari kode saya (yang tidak menjawab pertanyaan asli tetapi mungkin bermanfaat bagi seseorang) terlihat seperti ini:
Daripada menggunakan spasi sebagai pembatas dan mengganti semua spasi dengan koma, itu hanya pra-pends tanda koma dan ruang untuk setiap nilai kemudian gunakan
STUFF
untuk menghapus dua karakter pertama.Pengkodean XML dilakukan secara otomatis dengan menggunakan arahan TYPE .
sumber
Opsi lain menggunakan Sql Server 2005 dan di atasnya
sumber
Instal Agregat SQLCLR dari http://groupconcat.codeplex.com
Kemudian Anda dapat menulis kode seperti ini untuk mendapatkan hasil yang Anda minta:
sumber
SQL Server 2005 dan yang lebih baru memungkinkan Anda untuk membuat fungsi agregat kustom Anda sendiri , termasuk untuk hal-hal seperti penggabungan - lihat contoh di bagian bawah artikel yang ditautkan.
sumber
Delapan tahun kemudian ... Mesin Database Microsoft SQL Server vNext akhirnya meningkatkan Transact-SQL untuk secara langsung mendukung penggabungan string yang dikelompokkan. Komunitas Technical Preview versi 1.0 menambahkan fungsi STRING_AGG dan CTP 1.1 menambahkan klausa WITHIN GROUP untuk fungsi STRING_AGG.
Referensi: https://msdn.microsoft.com/en-us/library/mt775028.aspx
sumber
Ini hanya tambahan untuk posting Kevin Fairchild (sangat pintar). Saya ingin menambahkannya sebagai komentar, tetapi saya belum memiliki poin yang cukup :)
Saya menggunakan ide ini untuk tampilan yang sedang saya kerjakan, namun item yang saya gabungkan mengandung ruang. Jadi saya memodifikasi sedikit kode untuk tidak menggunakan spasi sebagai pembatas.
Sekali lagi terima kasih atas solusi kerennya Kevin!
sumber
Contohnya adalah
Di Oracle Anda dapat menggunakan fungsi agregat LISTAGG.
Catatan asli
Sql
Hasil dalam
sumber
Pertanyaan semacam ini sering ditanyakan di sini, dan solusinya akan sangat bergantung pada persyaratan yang mendasarinya:
https://stackoverflow.com/search?q=sql+pivot
dan
https://stackoverflow.com/search?q=sql+concatenate
Biasanya, tidak ada cara hanya SQL untuk melakukan ini tanpa sql dinamis, fungsi yang ditentukan pengguna, atau kursor.
sumber
Hanya untuk menambah apa yang dikatakan Cade, ini biasanya tampilan depan dan karenanya harus ditangani di sana. Saya tahu bahwa kadang-kadang lebih mudah untuk menulis sesuatu 100% dalam SQL untuk hal-hal seperti ekspor file atau solusi "SQL saja" lainnya, tetapi sebagian besar waktu penggabungan ini harus ditangani di lapisan tampilan Anda.
sumber
Tidak perlu kursor ... loop sementara sudah cukup.
sumber
Mari kita menjadi sangat sederhana:
Ganti baris ini:
Dengan kueri Anda.
sumber
tidak melihat jawaban lintas diterapkan, juga tidak perlu ekstraksi xml. Ini adalah versi yang sedikit berbeda dari apa yang ditulis Kevin Fairchild. Lebih cepat dan lebih mudah digunakan dalam permintaan yang lebih kompleks:
sumber
Anda dapat meningkatkan kinerja yang signifikan dengan cara berikut jika grup dengan sebagian besar berisi satu item:
sumber
Menggunakan Ganti Fungsi dan UNTUK PATUNG JSON
Untuk sampel data dan lebih banyak cara klik di sini
sumber
Jika Anda telah mengaktifkan CLR Anda bisa menggunakan pustaka Group_Concat dari GitHub
sumber