Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Apakah mungkin untuk mengabaikan nilai NULL saat menggunakan fungsi LAG() dan LEAD() di SQL Server?

Mungkin menggunakan fungsi jendela. Bacalah artikel oleh Itzik Ben-Gan untuk lebih jelasnya.

Pada kode di bawah ini, cte mendapatkan nilai NOT NULL id terbaru, kemudian pilih berikutnya mendapatkan nilai kolom yang sebenarnya. Contoh ini menggunakan LAG.mis.

-- DDL for T1
SET NOCOUNT ON;
USE tempdb;
IF OBJECT_ID(N'dbo.T1', N'U') IS NOT NULL DROP TABLE dbo.T1;
GO
CREATE TABLE dbo.T1
(
id INT NOT NULL CONSTRAINT PK_T1 PRIMARY KEY,
col1 INT NULL
);

-- Small set of sample data
TRUNCATE TABLE dbo.T1;

INSERT INTO dbo.T1(id, col1) VALUES
( 2, NULL),
( 3,   10),
( 5,   -1),
( 7, NULL),
(11, NULL),
(13,  -12),
(17, NULL),
(19, NULL),
(23, 1759);

;WITH C AS
(
SELECT
    id, 
    col1, 
    MAX(CASE WHEN col1 IS NOT NULL THEN id END) OVER(ORDER BY id ROWS UNBOUNDED PRECEDING) AS grp
FROM dbo.T1
)
SELECT
    id, 
    col1, 
    (SELECT col1 FROM dbo.T1 WHERE id = grp) lastval    
FROM C;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mendapatkan Nama Pengguna Masuk Windows untuk Pengguna Masuk SQL

  2. Bisakah pemicu SQL CLR melakukan ini? Atau ada cara yang lebih baik?

  3. Mengapa saya tidak dapat terhubung ke database mssql saya menggunakan PHP?

  4. Bagaimana cara memeriksa kapan pertumbuhan otomatis dilakukan terakhir?

  5. Mengubah DB sql-server dari tabular ke multidimensi