求SQL语句:将日期为空的单号的日期更改为已存在单号的日期

tansx 2023-03-10 18:31:00

如下表:

单号      日期   
001     23-01-01
002     23-02-01
001   
002

求SQL语句:将最后两条记录日期为空的单号的日期更改为已存在单号的日期,如 日期空的001单号的日期更改为23-01-01,日期空的002单号的日期更改为23-02-01,不胜感激!

...全文
115 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
炎同学要努力 2023-06-09
  • 打赏
  • 举报
回复

;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.日期 <>''

shoppo0505 2023-03-14
  • 打赏
  • 举报
回复

你这个操作有点迷啊。
一般来说应该删除这些日期为空的数据行才对

tansx 2023-03-11
  • 打赏
  • 举报
回复

非常感谢版主!

tansx 2023-03-11
  • 打赏
  • 举报
回复

没人回复是因为太难了吗?

吉普赛的歌 版主 2023-03-11
  • 打赏
  • 举报
回复

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
*/
tansx 2023-03-11
  • 打赏
  • 举报
回复

没人回复是因为太简单了吗?

tansx 2023-03-10
  • 打赏
  • 举报
回复

各位大侠留步,回复一下呗!

tansx 2023-03-10
  • 打赏
  • 举报
回复

怎么没人回复啊?

34,623

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧