34,623
社区成员
![](https://csdnimg.cn/release/cmsfe/public/img/topic.427195d5.png)
![](https://csdnimg.cn/release/cmsfe/public/img/me.40a70ab0.png)
![](https://csdnimg.cn/release/cmsfe/public/img/task.87b52881.png)
![](https://csdnimg.cn/release/cmsfe/public/img/share-circle.3e0b7822.png)
如下表:
单号 日期
001 23-01-01
002 23-02-01
001
002
求SQL语句:将最后两条记录日期为空的单号的日期更改为已存在单号的日期,如 日期空的001单号的日期更改为23-01-01,日期空的002单号的日期更改为23-02-01,不胜感激!
;with src as
(
select 单号= '001', 日期= '2023-01-01' union all
select 单号= '002', 日期= '2023-02-01' union all
select 单号= '001', 日期= '' union all
select 单号= '002', 日期= ''
)
select src.单号,case when src.日期 =''then temp.日期 else src.日期 end as [日期]
from src left join src as temp on src.单号 = temp.单号 and temp.日期 <>''
你这个操作有点迷啊。
一般来说应该删除这些日期为空的数据行才对
非常感谢版主!
没人回复是因为太难了吗?
USE tempdb
GO
IF OBJECT_ID('dbo.[t]') IS NOT NULL
DROP TABLE dbo.[t]
GO
CREATE TABLE dbo.[t](
[单号] NVARCHAR(MAX)
,[日期] NVARCHAR(MAX)
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[t] VALUES(N'001',N'23-01-01')
INSERT INTO dbo.[t] VALUES(N'002',N'23-02-01')
INSERT INTO dbo.[t] VALUES(N'001',NULL)
INSERT INTO dbo.[t] VALUES(N'002',NULL)
----------- 以上为测试表及测试数据 -----------
;with cte as(
select 单号,max(日期) as 日期
from t
where 日期 is not null
group by 单号
)
update a
set a.日期=b.日期
from t as a inner join cte as b
on a.单号=b.单号
where a.日期 is null
select * from t
/*
单号 日期
001 23-01-01
002 23-02-01
001 23-01-01
002 23-02-01
*/
没人回复是因为太简单了吗?
各位大侠留步,回复一下呗!
怎么没人回复啊?