随、风 2024-03-16 08:54 采纳率: 28.6%
浏览 1
已结题

数据库进阶-数据处理

SQL server有以下两个表。分别为表A,表B
表A:

LineModelYearMonthNums
Aaa20241月154
Aaa20242月123

表B:

LineModelYearMonthChangeDayAfterNums
AAaa20242月2024-02-04123

SQL server中,将这两个表组合关联处理获取到以下的表C内容:

LineModelDayTZ
Aaa2024-01-01154
Aaa2024-01-02154
Aaa2024-01-03154
Aaa2024-01-04154
Aaa2024-01-05154
Aaa2024-01-06154
Aaa2024-01-07154
Aaa2024-01-08154
Aaa2024-01-09154
Aaa2024-01-10154
Aaa2024-02-03154
Aaa2024-02-04123
Aaa2024-02-04124
Aaa2024-02-04125

表C中的。表示按照规律直到表B的日期出现,则表C的TZ值变更为表B的AfterNums值,再次按照日期逐天的规律直到下一个表B的内容出现。表A和表B可通过Model连接。问:在SQL server中,如何将这表A、表B组合关联处理获取到表C内容?

  • 写回答

3条回答 默认 最新

  • 关注

    随、风 上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    解决方案:

    1. 首先,我们需要使用UNION ALL操作符将表A和表B合并成一个新的临时表。通过将表A和表B的列进行对齐,我们可以使用 NULL 值填充缺失的列。

      SELECT Line, Model, Year, Month, Nums AS TZ, NULL AS ChangeDay, NULL AS AfterNums
      FROM 表A
      UNION ALL
      SELECT Line, Model, Year, Month, NULL AS TZ, ChangeDay, AfterNums
      FROM 表B
      
    2. 接下来,我们可以使用窗口函数ROW_NUMBER()来分配一个唯一的标识符给每一行,并按照日期进行排序。

      SELECT *, ROW_NUMBER() OVER (ORDER BY Year, Month, ChangeDay) AS rn
      INTO #temp
      FROM (
          SELECT Line, Model, Year, Month, Nums AS TZ, NULL AS ChangeDay, NULL AS AfterNums
          FROM 表A
          UNION ALL
          SELECT Line, Model, Year, Month, NULL AS TZ, ChangeDay, AfterNums
          FROM 表B
      ) t
      
    3. 现在,我们可以使用窗口函数LAG()来获取前一行的AfterNums的值,并将其应用到当前行的TZ列,从而实现根据规律更新TZ的值。

      SELECT Line, Model, DATEADD(DAY, DATEDIFF(DAY, 0, DATEADD(DAY, -1, COALESCE(ChangeDay, LAG(ChangeDay) OVER (ORDER BY Year, Month, ChangeDay)))), 0) AS Day, COALESCE(AfterNums, LAG(AfterNums) OVER (ORDER BY Year, Month, ChangeDay)) AS TZ
      FROM #temp
      
    4. 最后,我们可以根据需要删除临时表。

      DROP TABLE IF EXISTS #temp
      

    以上就是在SQL Server中将表A和表B进行组合关联处理并获取到表C内容的方法。

    注意:这里假设表A和表B的数据是按照日期有序的。如果不是按照日期有序的,可以在联接操作前使用ORDER BY子句对表A和表B进行排序。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月20日
  • 修改了问题 3月16日
  • 修改了问题 3月16日
  • 创建了问题 3月16日

悬赏问题

  • ¥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