Bagaimana untuk Membahagikan Data Lajur kepada Baris dalam SQL?
Apabila bekerja dengan pangkalan data hubungan, anda mungkin menghadapi situasi di mana anda perlu membahagikan data dalam satu lajur menjadi berbilang baris. Teknik ini amat berguna untuk senario seperti mengasingkan senarai item yang dipisahkan koma ke dalam baris individu.
Untuk mencapai ini, anda boleh memanfaatkan kuasa fungsi manipulasi rentetan dalam SQL. Mari terokai dua kaedah untuk memisahkan data lajur kepada baris:
1. Menggunakan Fungsi Pisah:
Anda boleh mencipta fungsi pemisahan tersuai untuk membahagikan data lajur berdasarkan pembatas tertentu, seperti koma atau koma bernoktah. Berikut ialah contoh fungsi yang boleh anda gunakan:
CREATE FUNCTION [dbo].[Split](@String VARCHAR(MAX), @Delimiter CHAR(1)) RETURNS @temptable TABLE (items VARCHAR(MAX)) AS BEGIN DECLARE @idx INT DECLARE @slice VARCHAR(8000) SELECT @idx = 1 IF LEN(@String)<1 OR @String IS NULL RETURN WHILE @idx!= 0 BEGIN SET @idx = CHARINDEX(@Delimiter,@String) IF @idx!=0 SET @slice = LEFT(@String,@idx - 1) ELSE SET @slice = @String IF(LEN(@slice)>0) INSERT INTO @temptable(Items) VALUES(@slice) SET @String = RIGHT(@String,LEN(@String) - @idx) IF LEN(@String) = 0 BREAK END RETURN END;
2. Menggunakan CTE Rekursif:
Sebagai alternatif, anda boleh menggunakan Ungkapan Jadual Biasa (CTE) rekursif untuk mencapai hasil yang sama. Berikut ialah penyelesaian CTE:
WITH cte (code, DeclarationItem, Declaration) AS ( SELECT Code, CAST(LEFT(Declaration, CHARINDEX(',',Declaration+',')-1) AS VARCHAR(50)) DeclarationItem, STUFF(Declaration, 1, CHARINDEX(',',Declaration+','), '') Declaration FROM yourtable UNION ALL SELECT code, CAST(LEFT(Declaration, CHARINDEX(',',Declaration+',')-1) AS VARCHAR(50)) DeclarationItem, STUFF(Declaration, 1, CHARINDEX(',',Declaration+','), '') Declaration FROM cte WHERE Declaration > '' ) SELECT code, DeclarationItem FROM cte
Contoh Penggunaan:
Untuk membahagikan lajur 'Pengisytiharan' dalam jadual 'meja anda' kepada baris individu, anda boleh menggunakan sama ada daripada kaedah di atas. Contohnya:
SELECT t1.code, s.items AS declaration FROM yourtable t1 OUTER APPLY dbo.split(t1.declaration, ',') s
Pertanyaan ini akan menghasilkan hasil apabila lajur 'Pengisytiharan' dibahagikan kepada baris yang berasingan untuk setiap item.
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Data Lajur kepada Berbilang Baris dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!