Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengisi Nilai NULL berturut-turut dengan Nilai Bukan NULL Sebelumnya dalam Pelayan SQL?

Bagaimana untuk Mengisi Nilai NULL berturut-turut dengan Nilai Bukan NULL Sebelumnya dalam Pelayan SQL?

DDD
DDDasal
2025-01-03 15:35:38963semak imbas

How to Fill NULL Values in a Row with the Previous Non-NULL Value in SQL Server?

Cara Menggantikan Nilai NULL Berturut-turut dengan Nilai daripada Nilai Diketahui Sebelumnya

Masalah:

Anda perlu menggantikan nilai NULL berturut-turut dengan nilai daripada nilai terakhir yang diketahui pada tarikh sebelumnya. Contohnya, jika lajur tarikh mengandungi nilai "1," "2," "3," "4," dan "5," dan lajur nombor mengandungi nilai "3," "NULL," "5," "NULL ," dan "NULL," nilai NULL hendaklah digantikan dengan "3," "5," dan "5," masing-masing.

Solution (SQL Pelayan):

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

Penjelasan:

  • Fungsi ISNULL menyemak sama ada lajur Val ialah NULL. Jika ya, ia mengembalikan nilai daripada subkueri.
  • Subkueri memilih 1 nilai bukan NULL teratas daripada jadual @Table di mana lajur ID kurang daripada lajur ID baris semasa.
  • Klausa ORDER BY ID DESC memastikan bahawa nilai bukan NULL terbaharu dikembalikan.

Atas ialah kandungan terperinci Bagaimana untuk Mengisi Nilai NULL berturut-turut dengan Nilai Bukan NULL Sebelumnya dalam Pelayan 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