select id, group_concat(`Name` separator ',') as `ColumnName`
from
(
select
id,
concat(`Name`, ':', group_concat(`Value` separator ',')) as `Name`
from mytbl
group by
id,
`Name`
) tbl
group by id;
Anda dapat melihatnya diimplementasikan di sini: Demo Sql Fiddle . Persis yang Anda butuhkan.
Perbarui
Pemisahan dalam dua langkah. Pertama kita mendapatkan tabel yang memiliki semua nilai (dipisahkan koma) terhadap [Nama, id] yang unik. Kemudian dari tabel yang diperoleh kita mendapatkan semua nama dan nilai sebagai nilai tunggal terhadap setiap id unik Lihat ini dijelaskan di sini Demo SQL Fiddle (gulir ke bawah karena memiliki dua set hasil)
Sunting Ada kesalahan dalam membaca soal, saya telah mengelompokkan berdasarkan id. Tetapi dua group_contacts diperlukan jika (Nilai akan digabungkan dikelompokkan berdasarkan Nama dan id dan kemudian di atas semua oleh id). Jawaban sebelumnya adalah
select
id,group_concat(concat(`name`,':',`value`) separator ',')
as Result from mytbl group by id
Anda dapat melihatnya diimplementasikan di sini: SQL Fiddle Demo
GROUP_CONCAT
mungkin secara diam-diam memotong keluarannya menjadigroup_concat_max_len
.SET group_concat_max_len=...
akan membantu, tetapi sebaiknya periksa apakah panjang yang dikembalikan (byte?) kurang darigroup_concat_max_len
.Mencoba:
SQL Fiddle: http://sqlfiddle.com/#!2/b5abe/9/0
sumber
sumber
Pertama-tama, saya tidak melihat alasan memiliki ID yang tidak unik, tapi saya rasa ID itu terhubung ke tabel lain. Kedua, tidak perlu subkueri, yang mengalahkan server. Anda melakukan ini dalam satu kueri, seperti ini
Anda mendapatkan hasil yang cepat dan tepat, dan Anda dapat membagi hasilnya dengan SEPARATOR "|" itu. Saya selalu menggunakan pemisah ini, karena tidak mungkin menemukannya di dalam string, oleh karena itu unik. Tidak ada masalah memiliki dua A, Anda hanya mengidentifikasi nilainya. Atau Anda dapat memiliki satu kolom lagi, dengan hurufnya, yang bahkan lebih baik. Seperti ini :
sumber
Anda harus menggunakan cast atau convert, jika tidak maka BLOB akan dikembalikan
hasilnya adalah
Anda harus menangani hasil sekali lagi dengan program seperti python atau java
sumber
IF OBJECT_ID('master..test') is not null Drop table test
Nama tabel saya adalah test, dan untuk penggabungan saya menggunakan sintaks For XML Path (''). Fungsi barang memasukkan string ke string lain. Ini menghapus panjang karakter tertentu dalam string pertama di posisi awal dan kemudian memasukkan string kedua ke string pertama di posisi awal.
Fungsi STUFF terlihat seperti ini: STUFF (ekspresi_karakter, mulai, panjang, ekspresi_karakter)
character_expression Merupakan ekspresi dari data karakter. character_expression dapat berupa konstanta, variabel, atau kolom dari data karakter atau biner.
start Adalah nilai integer yang menentukan lokasi untuk memulai penghapusan dan penyisipan. Jika awal atau panjang negatif, string nol dikembalikan. Jika awal lebih panjang dari ekspresi_karakter pertama, string null dikembalikan. mulai bisa tipe bigint.
length Adalah bilangan bulat yang menentukan jumlah karakter yang akan dihapus. Jika panjangnya lebih panjang dari ekspresi_karakter pertama, penghapusan terjadi hingga karakter terakhir dalam ekspresi_karakter terakhir. panjangnya bisa tipe bigint.
sumber
PILIH id, Group_concat (
column
) FROM (SELECT id, Concat (name
, ':', Group_concat (value
)) SEBAGAIcolumn
DARI mytbl GROUP BY id, name) tbl GROUP BY id;sumber