我有一个完整的跟踪数据的表作为特定当然,当然号码6。

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

数据的每一行是一个用户为一个疗程,所以对于用户分配给两个横列6,当然11有两行数据。

客户希望谁已完成课程编号2008年6标记为11.当然任何时间8月1日之后,还必须完成所有的用户不过,我可以不只是转换了6到11,因为他们希望保留他们的推移,旧数据6。

因此,对于有6个疗程号的每一行,被标记为已完成,并于2008年的日期八一更大,我想写了一个包含课程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和用户ID / courseID明显作为将不能结转已经在正确的地方。

有帮助吗?

解决方案

也许我读错的问题,但我相信你已经插入课程11条记录,只需要更新那些符合你当然6的数据中列出的标准。

如果是这样的话,你会希望使用UPDATE ... FROM语句:

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

参见此相关SO更多信息问题

其他提示

UPDATE c11
SET
    c11.completed= c6.completed,
    c11.complete_date = c6.complete_date,
-- rest of columns to be copied
FROM courses c11 inner join courses c6 on
    c11.userID = c6.userID 
    and c11.courseID = 11 and c6.courseID = 6
     -- and any other checks

我一直观看的从更新的子句,等的正常选择的一个。其实如果你要检查什么会运行更新之前更新,你可以拿一个选择C11替换更新零件。*。看到我的跛脚鸭的答复意见。

<强>从一个行的值复制到相同的表内的任何其它合格的行(或不同的表):

UPDATE `your_table` t1, `your_table` t2
SET t1.your_field = t2.your_field
WHERE t1.other_field = some_condition
AND t1.another_field = another_condition
AND t2.source_id = 'explicit_value'

由混叠的表分成2点唯一的参考号开始关闭,因此在SQL服务器可以告诉他们分开

接下来,指定字段(一个或多个)来复制。

最后,指定管辖行的选择的条件

根据你可以从单个行复制到一个系列的条件,或者可能的一系列复制到一个系列。你也可以指定不同的表,你甚至可以使用子查询或联接以允许使用其他表来控制的关系。

使用选择要插入记录

INSERT tracking (userID, courseID, course, bookmark, course_date, posttest, post_attempts, post_score, post_date, complete, complete_date, exempted, exempted_date, exempted_reason, emailSent) 
SELECT userID, 11, course, bookmark, course_date, posttest, post_attempts, post_score, post_date, complete, complete_date, exempted, exempted_date, exempted_reason, emailSent
FROM tracking WHERE courseID = 6 AND course_date > '08-01-2008'

尝试这种情况:

UPDATE barang
SET ID FROM(SELECT tblkatalog.tblkatalog_id FROM tblkatalog 
WHERE tblkatalog.tblkatalog_nomor = barang.NO_CAT) WHERE barang.NO_CAT <>'';

此可以很好地用于应对整个记录。

UPDATE your_table
SET new_field = sourse_field
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top