一尘不染

将数据从一个现有行复制到SQL中的另一个现有行?

sql

我有一张充满了特定课程(课程编号6)的跟踪数据的表格。

现在,我为课程编号11添加了新的跟踪数据。

每行数据是针对一个课程的一个用户的,因此对于同时分配给课程6和课程11的用户,将有两行数据。

客户希望所有在2008年8月1日之后任何时候完成课程6的用户也将完成课程11标记为完成。但是,我不能仅仅将6转换为11,因为他们想要保留课程6的旧数据。

因此,对于课程号为6的每一行,标记为已完成,并且大于2008年8月1日的日期,我想在包含针对该特定用户的课程11跟踪的行上写入完成数据。

我需要将数据从课程6行转移到课程11行,以便将用户得分和发布完成日期之类的内容移到其他位置。

这是表格的结构:

userID (int)
courseID (int)
course (bit)
bookmark (varchar(100))
course_date (datetime)
posttest (bit)
post_attempts (int)
post_score (float)
post_date (datetime)
complete (bit)
complete_date (datetime)
exempted (bit)
exempted_date (datetime)
exempted_reason (int)
emailSent (bit)

一些值将为NULL,并且userID / courseID显然不会被继承,因为它已经在正确的位置。


阅读 179

收藏
2021-03-17

共1个答案

一尘不染

也许我读错了问题,但是我相信您已经插入了课程11的记录,只需要更新那些符合课程6的数据列出的条件的记录即可。

如果是这种情况,则需要使用UPDATEFROM语句:

UPDATE MyTable
SET
    complete = 1,
    complete_date = newdata.complete_date,
    post_score = newdata.post_score
FROM
    (
    SELECT
        userID,
        complete_date,
        post_score
    FROM MyTable
    WHERE
        courseID = 6
        AND complete = 1
        AND complete_date > '8/1/2008'
    ) newdata
WHERE
    CourseID = 11
    AND userID = newdata.userID
2021-03-17