Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menggantikan Nilai NULL dengan Nilai Bukan NULL Sebelumnya dalam SQL?

Bagaimana untuk Menggantikan Nilai NULL dengan Nilai Bukan NULL Sebelumnya dalam SQL?

Barbara Streisand
Barbara Streisandasal
2025-01-04 10:42:34906semak imbas

How to Replace NULL Values with the Previous Non-NULL Value in SQL?

Gantikan Nilai NULL dengan Nilai Diketahui Sebelumnya dalam SQL

Dalam pangkalan data SQL, adalah perkara biasa untuk menemui jadual dengan nilai yang tiada atau NULL. Dalam senario tertentu, nilai NULL ini perlu diganti dengan nilai yang diketahui terkini daripada baris sebelumnya. Ini amat berguna apabila bekerja dengan data siri masa, di mana nilai yang tiada boleh mengganggu analisis data.

Contoh:

Pertimbangkan jadual berikut yang mewakili siri masa nombor diindeks mengikut tarikh:

date   number
----   ------
1      3
2      NULL
3      5
4      NULL
5      NULL
6      2

Kami mahu menggantikan nilai NULL dalam lajur nombor dengan nilai terkini yang diketahui daripada baris sebelumnya. Sebagai contoh, tarikh 2 hendaklah diisi dengan 3, tarikh 4 dan 5 hendaklah diisi dengan 5, dan seterusnya.

Penyelesaian Menggunakan SQL Server:

DECLARE @Table TABLE(
        ID INT,
        Val INT
)

INSERT INTO @Table (ID,Val) SELECT 1, 3
INSERT INTO @Table (ID,Val) SELECT 2, NULL
INSERT INTO @Table (ID,Val) SELECT 3, 5
INSERT INTO @Table (ID,Val) SELECT 4, NULL
INSERT INTO @Table (ID,Val) SELECT 5, NULL
INSERT INTO @Table (ID,Val) SELECT 6, 2


SELECT  *,
        ISNULL(Val, (SELECT TOP 1 Val FROM @Table WHERE ID < t.ID AND Val IS NOT NULL ORDER BY ID DESC))
FROM    @Table t

Pertanyaan ini menggunakan subkueri untuk mencari nilai bukan NULL terkini untuk setiap baris dengan nilai NULL. Fungsi ISNULL kemudian menggantikan nilai NULL dengan nilai yang dipilih. Hasilnya ialah jadual dengan nilai NULL digantikan dengan nilai yang diketahui sebelumnya.

Atas ialah kandungan terperinci Bagaimana untuk Menggantikan Nilai NULL dengan Nilai Bukan NULL Sebelumnya 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