Rumah > pangkalan data > tutorial mysql > Bagaimanakah saya boleh membahagikan satu lajur berbilang nombor langganan ke dalam lajur individu dalam SQL?

Bagaimanakah saya boleh membahagikan satu lajur berbilang nombor langganan ke dalam lajur individu dalam SQL?

DDD
Lepaskan: 2024-12-17 01:47:24
asal
143 orang telah melayarinya

How can I split a single column of multiple subscription numbers into individual columns in SQL?

Memisahkan Nombor Langganan kepada Berbilang Lajur

Dalam situasi di mana satu lajur mengandungi berbilang nilai, seperti nombor langganan, membelah nilai ini ke dalam lajur individu boleh menjadi teknik manipulasi data yang berguna. Berikut ialah panduan langkah demi langkah:

1. Silang Gunakan Pecahan XML:

Pendekatan ini menggunakan pemecahan XML untuk menukar nombor langganan kepada dokumen XML, membenarkan nilai individu diekstrak sebagai nod berasingan.

Cross Apply (
    Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)')))
          ,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)')))
          ,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)')))
          ,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(max)')))
          ,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(max)')))
          ,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(max)')))
          ,Pos7 = ltrim(rtrim(xDim.value('/x[7]','varchar(max)')))
    From  (Select Cast('<x>' + replace((Select replace(replace(A.SomeCol,' ','-'),'-','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A 
) B
Salin selepas log masuk

Di sini, xDim ialah elemen pemecahan yang menukar rentetan nombor langganan kepada XML. Nod yang terhasil, bernombor sebagai x[1], x[2] dan seterusnya, diekstrak ke dalam lajur sasaran.

2. Mencipta Jadual on-the-fly:

Sebagai alternatif, anda boleh mencipta jadual sasaran secara dinamik semasa pelaksanaan pertanyaan. Ini menghapuskan keperluan untuk pernyataan penciptaan jadual yang eksplisit terlebih dahulu.

Select A.PUB_FORM_NUM
      ,B.*
 Into  MyNewPubTable
 From  @YourTable A
 Cross Apply (
                Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)')))
                      ,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)')))
                      ,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)')))
                      ,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(max)')))
                      ,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(max)')))
                      ,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(max)')))
                      ,Pos7 = ltrim(rtrim(xDim.value('/x[7]','varchar(max)')))
                From  (Select Cast('<x>' + replace((Select replace(replace(A.PUB_FORM_NUM,' ','-'),'-','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A 
             ) B
Salin selepas log masuk

Pendekatan ini mencipta MyNewPubTable dan memasukkan nilai nombor langganan berpecah terus ke dalam lajur yang disasarkan.

Atas ialah kandungan terperinci Bagaimanakah saya boleh membahagikan satu lajur berbilang nombor langganan ke dalam lajur individu dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan