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
Lepaskan: 2025-01-05 07:03:42
asal
412 orang telah melayarinya

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;
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan