Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Възможно ли е да се игнорират NULL стойности, когато се използват функциите LAG() и LEAD() в SQL Server?

Възможно е използването на прозоречни функции. Прочетете тази статия от Ицик Бен-Ган за повече подробности.

В кода по-долу cte получава най-новата NOT NULL id стойност, след което следващият избор получава действителната стойност на колоната. Този пример използва 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. Изберете първото копие на запис

  2. POWER() Примери в SQL Server

  3. Параметър с таблична стойност в съхранена процедура и Entity Framework 4.0

  4. Има ли начин да се извлече дефиницията на изглед от SQL Server с помощта на обикновен ADO?

  5. Заявката е изключително бавна в кода, но бърза в SSMS