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
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
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!