首页 > 解决方案 > 如果它与当前值相同,则忽略最后一个值

问题描述

我有一张表,我想在其中查询以下内容:

数据是分批来的。此数据与 id 结合。

此 ID 仅在新批次进来时才会发送。之后,ID 仅在有新批次时更改。同时,该值保持为空

我需要做的是,如果新数据进入并且它具有与前一批相同的 id,我必须在 id 字段中继续插入 null,而不是推送具有相同 id 值的新行。

下面是桌子的简单视图

ID            Values
1             10
null          20
null          20
null          20
null          20
2             20
null          20
null          20
null          20
null          20
1             20
null          20

如果你能帮我指出一个对我有很大帮助的方向。

也许要清除 id 值是一组标签。因此,有一些已定义的标签(100 个或更多),当新批次到来时,该批次会获得一个标签。如果该标签与前一个标签相同,则 null 必须继续,而不是插入相同的标签

标签: sqlsql-server

解决方案


这低于 Sp 可能有助于惰性数据试试这个

IF OBJECT_ID('tempdb..#Temp')IS NOT NULL
DROP TABLE #Temp

CREATE TABLE #Temp (ID INT,[Values] INT)

CREATE PROCEDURE usp_Insert 
(
@Id INT,
@Values INT
)
AS
BEGIN
IF NOT EXISTS (SELECT 1 FROM #Temp WHERE ID = @ID)
BEGIN
    INSERT INTO #Temp(ID,[Values])
    SELECT @Id,@Values
END  
ELSE 
    INSERT INTO #Temp(ID,[Values])
    SELECT NULL,@Values

END


EXEC usp_Insert 2,12

SELECT * FROM #Temp

推荐阅读