Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Có thể bỏ qua giá trị NULL khi sử dụng hàm LAG () và LEAD () trong SQL Server không?

Có thể sử dụng các chức năng cửa sổ. Hãy đọc bài viết này của Itzik Ben-Gan để biết thêm chi tiết.

Trong đoạn mã bên dưới, cte đang nhận giá trị id NOT NULL gần đây nhất, sau đó lựa chọn tiếp theo nhận giá trị cột thực tế. Ví dụ này sử dụng LAG.eg.

-- 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. Cách đổi tên cơ sở dữ liệu SQL Server bằng T-SQL

  2. Duyệt qua tất cả các khóa ngoại trong cơ sở dữ liệu và tạo một đường dẫn

  3. Cách sao lưu hoặc tạo bảng mới từ Bảng SQL Server Hiện có trong SQL Server - Hướng dẫn sử dụng SQL Server / TSQL Phần 105

  4. Sự cố ASP cổ điển khi kết nối với cơ sở dữ liệu SQL Server từ xa

  5. Cấu hình sao chép giao dịch SQL Server