نسخ البيانات من القائمة صف إلى آخر الصف الحالي في SQL ؟
سؤال
لدي جدول كامل من تتبع بيانات محددة الحال ، الدورة رقم 6.
الآن لدي إضافة جديدة تتبع بيانات الدورة رقم 11.
كل صف من البيانات لمستخدم واحد لمدة دورة واحدة ، حتى بالنسبة للمستخدمين تعيين كل دورة 6 و 11 الحال هناك صفين من البيانات.
يريد العميل جميع المستخدمين الذين أكملوا الدورة رقم 6 أي وقت بعد 1 أغسطس 2008 أن يكون أيضا إنجاز ملحوظ عن الدورة 11.ومع ذلك لا أستطيع تحويل 6 إلى 11 لأنهم يريدون الحفاظ على البيانات القديمة عن الدورة 6.
لذلك كل صف يحتوي على الحال عدد 6, تم وضع علامة كاملة و هو أكبر من تاريخ 1 أغسطس 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)
بعض القيم سوف تكون فارغة و userID/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
نصائح أخرى
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 server يمكن التفريق بينهم
بجانب تحديد مجال(s) نسخ.
الماضي, تحديد الشروط التي تحكم عملية اختيار الصفوف
اعتمادا على ظروف قد نسخ من صف واحد إلى سلسلة ، أو قد نسخ سلسلة إلى سلسلة.كما يمكنك تحديد جداول مختلفة و يمكنك حتى استخدام الفرعية يختار أو ينضم إلى السماح باستخدام الجداول الأخرى للسيطرة على العلاقات.
استخدام SELECT إلى إدراج سجلات
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