随、风 2024-03-20 09:04 采纳率: 28.6%
浏览 3

数据库-数据处理进阶

SQL server中有表A:

LineModelYearMonthNumsDateAfterNums
AA1202401月1232024-01-29NULL
AA1202401月1232024-01-30NULL
AA1202401月1232024-01-31NULL
AA1202402月982024-02-01NULL
AA1202402月982024-02-02NULL
AA1202402月982024-02-0398
AA1202402月982024-02-04NULL
AA1202402月982024-02-05NULL

怎么得到表B:

LineModelYearMonthNumsDateAfterNums
AA1202401月1232024-01-29NULL
AA1202401月1232024-01-30NULL
AA1202401月1232024-01-31NULL
AA1202402月1232024-02-01NULL
AA1202402月1232024-02-02NULL
AA1202402月982024-02-0398
AA1202402月982024-02-04NULL
AA1202402月982024-02-05NULL

问:表A如何得到表B的结果?Nums的值一直延续。当遇到AfterNums的值不为空,Nums的值开始以AfterNums的值延续,知道下一个AfterNums的值不为空。

  • 写回答

2条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-20 09:04
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    可以使用LAG函数和COALESCE函数来实现。LAG函数可以取出指定列前一行的值,而COALESCE函数可以返回参数中第一个非空值。 具体的做法是,在表A中新增一列NewNums,用LAG函数取出前一行的NewNums值并用COALESCE函数判断是否为空,若不为空则使用该值作为NewNums的值,否则使用Nums作为NewNums的值。最后将NewNums赋值给Nums即可。 代码如下:
    SELECT 
        Line,
        Model,
        Year,
        Month,
        COALESCE(AfterNums, NewNums) AS Nums,   -- 使用COALESCE函数判断取值
        Date,
        AfterNums
    FROM (
        SELECT *, 
            COALESCE(AfterNums, LAG(NewNums) OVER (PARTITION BY Line, Model ORDER BY Date)) AS NewNums  -- 使用LAG函数取出前一行的NewNums值
        FROM A
    ) AS B;
    

    输出结果与表B相同。

    评论

报告相同问题?

问题事件

  • 修改了问题 3月20日
  • 创建了问题 3月20日

悬赏问题

  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
  • ¥15 pycharm输出和导师的一样,但是标红
  • ¥15 想问问富文本拿到的html怎么转成docx的
  • ¥15 我看了您的文章,遇到了个问题。
  • ¥15 GitHubssh虚拟机连接不上
  • ¥15 装完kali之后下载Google输入法 重启电脑后出现以下状况 且退不出去 桌面消失 反复重启没用
  • ¥15 ESP-IDP-BLE配网连接wifi