gpt4 book ai didi

SQL Server NULL 替换为动态值

转载 作者:行者123 更新时间:2023-12-02 22:58:21 24 4
gpt4 key购买 nike

我希望将 NULL 值替换为基于表中数据的模式值。

在下面的示例中,我想将 EquipmentID 的 NULL InDate 替换为该 ProcessID 的 InDate 的模式值。我已经计算了 ProcessID 的模式 InDate,但我只是不知道如何使用该值来用 ProcessID 替换 EquipmentID 的 NULL 值

这是一个示例设置:

 CREATE TABLE dbo.Table_basic (
InDate INT,
EquipmentID INT,
ProcessID nvarchar(50),
SiteID INT
)

INSERT INTO Table_basic (InDate, EquipmentID, ProcessID, SiteID)
VALUES (2001, 1,'1PAA',1),
(2001,2,'1PAA',1),
(NULL, 3,'1PAA',1),
(2001,4,'1PAA',1),
(1999, 5,'1PAA',1),
(2001,6,'1PAB',1),
(2001,7,'1PAC',1),
(2001, 8,'2AA',2),
(1999,9,'2AB',2),
(NULL, 10,'2AB',2),
(1999,11,'2AB',2),
(1998,12,'2AB',2),
(2001, 13,'2AB',2),
(1999,14,'2AB',2),
(2001, 15,'2AC',2),
(2001,16,'2AC',2),
(1986, 17,'3AA',3),
(1985,18,'3AA',3),
(1985,19,'3AA',3),
(NULL, 20,'3AC',3),
(2005,21,'3AC',3),
(2005, 22,'3AC',3),
(2005,23,'3AC',3);

这就是我在 ProcessID 中查找设备 InDate 模式的方法。

WITH CTE_CountofEquipment AS
(
SELECT
ProcessID
,SiteID
,cnt = COUNT(1)
,rid = ROW_NUMBER() OVER (PARTITION BY ProcessID ORDER BY COUNT(1) DESC)
,InDate
FROM dbo.Table_basic
GROUP BY SiteID, ProcessID, InDate
)
SELECT
ProcessID
,cnt = cnt
,[SiteID]
,InDate
FROM CTE_CountofEquipment
WHERE rid = 1
ORDER BY SiteID;

我想使用这些确定的模式来填充给定 ProcessID 的 NULL InDate。

期望的结果示例:

(NULL, 3,'1PAA',1),
(2001, 3,'1PAA',1),
(2001, 3,'1PAA',1),
(1999, 3,'1PAA',1),
(2000, 3,'1PAA',1),
(2001, 3,'1PAA',1),

变成了

(2001, 3,'1PAA',1), -- InDate updated to modal value
(2001, 3,'1PAA',1),
(2001, 3,'1PAA',1),
(1999, 3,'1PAA',1),
(2000, 3,'1PAA',1),
(2001, 3,'1PAA',1),

谢谢

最佳答案

我会这样计算:

with modes as (
select p.*
from (select tb.processId, tb.indate, count(*) as cnt,
row_number() over (partition by tb.processId order by count(*) desc) as seqnum
from table_basic tb
group by tb.processId, tb.indate
) p
where seqnum = 1
)
update tb
set indate = m.indate
from table_basic tb join
modes m
on tb.processId = m.processId
where indate is null;

这回答了您的问题。我不知道为什么你的模式计算使用 SiteId。这不是问题的一部分。我不知道 EquipmentIdNULL 值的引用是什么。这也不是问题的一部分。

但是,您应该能够轻松地针对模式或其他列的其他分组进行修改。

关于SQL Server NULL 替换为动态值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48563052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com