You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为所有行填充相同非NULL列值?SQL实现求助

解决方案:重复显示非NULL的Col4/Col5并排除Col2/Col3为NULL的行

你的表结构和测试数据如下:

create table #table1(
ID int,
State varchar(50),
Col2 varchar(10),
Col3 varchar(10),
Col4 varchar(10),
Col5 varchar(10)
)

insert into #table1 
select 1,'TX',Null,NUll,'EEE','1234'
UNION ALL
select 1,'TX','AAA' ,'3456',NULL,NULL            
UNION ALL
select 1,'TX','BNH' ,'3467',NULL,NULL  
UNION ALL
select 1,'TX','GFR' ,'1356',NULL,NULL  
UNION ALL
select 1,'TX','UPY' ,'2345',NULL,NULL 

你之前用GROUP BY的方式会把结果聚合为一行,无法满足保留多行的需求。以下两种方法可以实现目标:

方法一:子查询关联

先筛选出Col2和Col3不为NULL的有效行,再关联获取对应ID/State下的Col4、Col5非NULL值:

SELECT 
    t.ID,
    t.State,
    t.Col2,
    t.Col3,
    c.Col4,
    c.Col5
FROM #table1 t
JOIN (
    SELECT ID, State, Col4, Col5
    FROM #table1
    WHERE Col4 IS NOT NULL AND Col5 IS NOT NULL
) c ON t.ID = c.ID AND t.State = c.State
WHERE t.Col2 IS NOT NULL AND t.Col3 IS NOT NULL;

方法二:窗口函数

利用窗口函数在不合并行的前提下,直接获取每组ID/State的Col4、Col5最大值(即唯一的非NULL值),同时过滤掉无效行:

SELECT 
    ID,
    State,
    Col2,
    Col3,
    MAX(Col4) OVER(PARTITION BY ID, State) AS Col4,
    MAX(Col5) OVER(PARTITION BY ID, State) AS Col5
FROM #table1
WHERE Col2 IS NOT NULL AND Col3 IS NOT NULL;

两种方法都能得到你期望的输出:

ID  State  col2  col3   Col4   Col5
1   TX     AAA   3456   EEE   1234
1   TX     BNH   3467   EEE   1234
1   TX     GFR   1356   EEE   1234
1   TX     UPY   2345   EEE   1234

内容的提问来源于stack exchange,提问作者unicorn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:57:14