SQL Server中替换同ID1分组下Value列Null值为组内最小值
解决SQL Server中按分组替换NULL值的问题
需求:当ID1列值相同时,若Value列存在NULL值,则将该NULL值替换为对应ID1分组的Value列最小值。
原表(Table 1)
| ID1 | ID2 | Value |
|---|---|---|
| 1 | 1 | 0.1 |
| 1 | 2 | 2 |
| 1 | 3 | null |
| 2 | 5 | 0.2 |
| 2 | 5 | null |
| 3 | 7 | 6 |
期望输出表
| ID1 | ID2 | Value |
|---|---|---|
| 1 | 1 | 0.1 |
| 1 | 2 | 2 |
| 1 | 3 | 0.1 |
| 2 | 5 | 0.2 |
| 2 | 5 | 0.2 |
| 3 | 7 | 6 |
实现SQL代码
SELECT ID1, ID2, ISNULL(Value, MIN(Value) OVER (PARTITION BY ID1)) AS Value FROM Table1;
代码说明
MIN(Value) OVER (PARTITION BY ID1):通过窗口函数按ID1分组计算每组Value列的最小值,该值会对应到分组内的每一行。ISNULL(Value, 分组最小值):判断当前行的Value是否为NULL,若是则用分组最小值替换,否则保留原Value值。
内容的提问来源于stack exchange,提问作者Glss1
相关产品推荐
相关产品推荐

