Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memisahkan Data Lajur kepada Berbilang Baris dalam SQL?

Bagaimana untuk Memisahkan Data Lajur kepada Berbilang Baris dalam SQL?

Patricia Arquette
Patricia Arquetteasal
2025-01-05 07:03:42414semak imbas

How to Split a Column's Data into Multiple Rows in SQL?

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!

Kenyataan:
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