Kopieren von Daten aus einem bestehenden Zeile zu einer anderen vorhandenen Zeilen in SQL?

StackOverflow https://stackoverflow.com/questions/663154

  •  20-08-2019
  •  | 
  •  

Frage

Ich habe eine Tabelle, die voll von Tracking-Daten für so bestimmten Kurs, Kursnummer 6.

Jetzt habe ich neue Tracking-Daten für Kursnummer 11 hinzugefügt.

Jede Reihe von Daten für einen Benutzer für einen Kurs, also für die Benutzer sowohl natürlich zugeordnet 6 und Verlauf 11 gibt es zwei Reihen von Daten.

Der Kunde will, dass alle Benutzer, die Kursnummer 6 jederzeit nach 1. August 2008 auch Abschluss für Kurs markiert haben abgeschlossen haben 11. Allerdings kann ich nicht nur die 6-11 konvertieren, weil sie wollen natürlich ihre alten Daten erhalten 6.

So für jede Zeile, die einen Kurs Zahl von 6 hat, als vollständig markiert ist, und größer als das Datum 1. August 2008, möchte ich die Abschlussdaten über die Reihe schreiben, die die Tracking für Kurs enthält 11 für diesen speziellen Benutzer.

ich müsste über die Daten aus der Reihe 6 Reihe zum Kurs 11 Reihe tragen, so Dinge wie Benutzer Punktzahl und das Datum der Fertigstellung geschrieben bewegt über.

Hier ist die Struktur der Tabelle:

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)

Einige Werte werden NULL und Benutzer-ID / courseID wird natürlich nicht so, dass übertragen wird bereits an der richtigen Stelle.

War es hilfreich?

Lösung

Vielleicht lese ich das Problem falsch, aber ich glaube, Sie bereits den Kurs 11 Datensätze eingefügt haben und müssen nur diejenigen aktualisieren, die die Kriterien, die Sie mit Kurs 6 Daten aufgelistet erfüllen.

Wenn dies der Fall ist, werden Sie eine UPDATE ... FROM Anweisung verwenden möchten:

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

Sehen Sie diese im Zusammenhang SO Frage für weitere Informationen

Andere Tipps

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

Ich habe immer die From-Klausel eines Updates, wie eine von einer normalen Auswahl gesehen. Eigentlich, wenn Sie überprüfen möchten, was vor dem Ausführen des Updates aktualisiert werden, können Sie die Update-Teile mit einer ausgewählten c11 nehmen ersetzen. *. Siehe meine Kommentare auf die Antwort der lahmen Ente.

Kopieren einen Wert von einer Reihe zu einer anderen qualifizierten Zeilen innerhalb der gleichen Tabelle (oder verschiedener Tabellen):

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'

durch Aliasing die Tabelle in zwei eindeutige Referenzen Beginnen Sie so die SQL Server sie auseinander halten kann

Als nächstes geben Sie den Bereich (e) zu kopieren.

Zuletzt geben Sie die Bedingungen für die Auswahl der Zeilen regeln

In Abhängigkeit von den Bedingungen, die Sie von einer einzelnen Zeile zu einer Reihe kopieren, oder Sie können eine Serie zu einer Reihe kopieren. Sie können auch verschiedene Tabellen angeben, und Sie können sogar Unter wählen verwenden oder schließen sich mit anderen Tabellen zu ermöglichen, die Beziehungen zu steuern.

Mit SELECT Datensätze einfügen

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'

Versuchen Sie folgendes:

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

Das funktioniert gut für ganzen Datensätze fertig zu werden.

UPDATE your_table
SET new_field = sourse_field
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top