随、风 2024-03-19 13:56 采纳率: 28.6%
浏览 4

数据库之数据处理进阶

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内容?
根据问题描述,想要通过 SQL Server 将表 A 和表 B 进行组合关联处理,生成表 C 的内容。表 C中的数据是按照规律逐天生成的,当日期匹配到表 B 中的日期时,对应的 TZ 值要更新为表 B 的 AfterNums值,然后继续按照日期规律生成直到下一个表 B 的内容出现。

  • 写回答

2条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-19 13:56
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    解答: 在 SQL Server 中,可以使用联接(JOIN)语句将表 A 和表 B 进行连接。根据题目描述,可以使用左外联接(LEFT JOIN)将表 A 和表 B 进行连接,然后根据日期规律逐天生成表 C 的内容。在生成过程中,需要判断当前日期是否与表 B 中的日期相等,如果相等则将 TZ 值更新为表 B 的 AfterNums 值。 具体实现可以按照以下步骤进行:
    1. 创建表 C 在 SQL Server 中,可以使用 SELECT INTO 语句创建一个新的表 C,用于存储生成的内容,语句格式如下:
    SELECT * INTO C FROM A WHERE 1=0
    

    这条语句会将表 A 的结构复制到表 C 中,但不会将数据复制过来。 2. 使用左外联接连接表 A 和表 B 使用以下 SQL 语句,将表 A 和表 B 进行左外联接,语句格式如下:

    SELECT A.Line, A.Model, DATEADD(day, Nums-1, CAST(CAST(A.Year AS VARCHAR(4)) + '-01-01' AS DATE)) AS Day, CASE WHEN B.AfterNums IS NOT NULL AND CAST(B.ChangeDay AS DATE) = DATEADD(day, Nums-1, CAST(CAST(A.Year AS VARCHAR(4)) + '-01-01' AS DATE)) THEN B.AfterNums ELSE A.Nums END AS TZ
    FROM A
    LEFT JOIN B ON A.Model = B.Model AND CAST(B.ChangeDay AS DATE) >= DATEADD(day, Nums-1, CAST(CAST(A.Year AS VARCHAR(4)) + '-01-01' AS DATE))
    

    这条语句会将表 A 和表 B 进行左外联接,根据日期规律逐天生成 Day 值,并根据表 B 中的内容更新 TZ 值。 3. 将结果插入表 C 使用 INSERT INTO 语句将生成的结果插入到表 C 中,语句格式如下:

    INSERT INTO C (Line, Model, Day, TZ)
    SELECT A.Line, A.Model, DATEADD(day, Nums-1, CAST(CAST(A.Year AS VARCHAR(4)) + '-01-01' AS DATE)) AS Day, CASE WHEN B.AfterNums IS NOT NULL AND CAST(B.ChangeDay AS DATE) = DATEADD(day, Nums-1, CAST(CAST(A.Year AS VARCHAR(4)) + '-01-01' AS DATE)) THEN B.AfterNums ELSE A.Nums END AS TZ
    FROM A
    LEFT JOIN B ON A.Model = B.Model AND CAST(B.ChangeDay AS DATE) >= DATEADD(day, Nums-1, CAST(CAST(A.Year AS VARCHAR(4)) + '-01-01' AS DATE))
    

    这条语句将生成的结果插入到表 C 中。 完整的 SQL 代码如下:

    SELECT * INTO C FROM A WHERE 1=0
    INSERT INTO C (Line, Model, Day, TZ)
    SELECT A.Line, A.Model, DATEADD(day, Nums-1, CAST(CAST(A.Year AS VARCHAR(4)) + '-01-01' AS DATE)) AS Day, CASE WHEN B.AfterNums IS NOT NULL AND CAST(B.ChangeDay AS DATE) = DATEADD(day, Nums-1, CAST(CAST(A.Year AS VARCHAR(4)) + '-01-01' AS DATE)) THEN B.AfterNums ELSE A.Nums END AS TZ
    FROM A
    LEFT JOIN B ON A.Model = B.Model AND CAST(B.ChangeDay AS DATE) >= DATEADD(day, Nums-1, CAST(CAST(A.Year AS VARCHAR(4)) + '-01-01' AS DATE))
    

    其中,DATEADD 函数用于根据规律生成日期,CASE WHEN 语句用于判断是否需要更新 TZ 值。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月19日

悬赏问题

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