Announcement

Collapse
No announcement yet.

Dublikation von Datensätzen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dublikation von Datensätzen

    Code:
    Insert into isop(iso_key ,passung ,utolfeld ,pid ,otolfeld ,untertol ,obertol ,prozent
    ,dt_ers ,ui_ers ,apr_ers ,dt_modi ,ui_modi ,apr_modi ,clintes)
    Select 6 ,passung ,utolfeld ,(max(pid)+1) ,otolfeld ,untertol ,obertol,
    0 ,'2011-05-04 16:47:10.000' ,1 ,11 ,'2011-05-12 14:56:32.000' ,1,11 ,NULL from rqm_isop where iso_key = 3
    Das ist mein Insertbefehl der zu folgendem Fehler führt:
    Msg 8120, Level 16, State 1, Line 1
    Column 'isop.passung' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
    Verstanden hab ich den Fehler auch nur ich frage mich auf was ich das group by machen soll.
    Sinn des ganzen ist es mir Arbeit zu ersparen viele Werte doppelt oder sogar vierfach zu schreiben. Anbei hab ich auch ein Bild von der Tabelle. Ich möchte also jede Zeile mit den angepassten Werten (siehe Select-Statement) "duplizieren".

    Schonmal Danke für die Hilfe
    Attached Files
    Zuletzt editiert von PatrickG; 13.05.2011, 08:52. Reason: Musste aus Sicherheitsgründen den Tabellennamen modifizieren

  • #2
    Mal so auf die Schnelle: in das GROUP BY gehören alle Felder, die keine Konstante und keine Funktion (wie SUM, MAX, AVG, ..) sind. In deinem Fall also wahrscheinlich passung, utolfeld, otolfeld, untertol und obertol. An deiner Stelle würde ich einfach mal dieses select alleine ausprobieren, dann sieht man
    1. ob es funktioniert und
    2. was man alles damit einfügt

    bye,
    Helmut

    Comment


    • #3
      Super,

      Danke Helmut. Hab nun folgenden SQL-Code, der mir das ganze so ausgibt wie ich es haben möchte:

      Code:
      Insert into isop(iso_key, passung, utolfeld, pid, otolfeld, untertol, obertol,
      prozent, dt_ers, ui_ers, apr_ers, dt_modi, ui_modi, apr_modi, clintes)
      
      Select 6 as iso_key, passung, utolfeld, (max(pid)+1)as pid, otolfeld, untertol, obertol,
      0 as prozent, '2011-05-04 16:47:10.000' as dt_ers, 1 as ui_ers, 11 as apr_ers,
      '2011-05-12 14:56:32.000' as dt_modi, 1 as ui_modi, 11 as apr_modi, NULL as clintes
      from rqm_isop where iso_key = 3 
      group by passung, utolfeld, otolfeld, untertol, obertol

      EDIT:

      Hab eben festgestellt, dass ich die pid aus denen errechne die iso_key =3 haben. Das problem ist aber, dass ich auch iso_key 4-5 habe und die auch eine fortlaufende pid haben. Kann ich die pid irgendwie vom where abkapseln, sodass ich die in der Tabelle größte pid bekomme und nicht die pid die am größten ist mit iso_key = 3?
      Zuletzt editiert von PatrickG; 13.05.2011, 10:43.

      Comment


      • #4
        Verstehe nicht, warum du die pid dann überhaupt selber ermittelst. Normalerweise definiert man das als IDENTITY und dann macht die Datenbank den Rest, ohne dass man die pid im Insert selber braucht!

        bye,
        Helmut

        Comment


        • #5
          Originally posted by hwoess View Post
          Verstehe nicht, warum du die pid dann überhaupt selber ermittelst. Normalerweise definiert man das als IDENTITY und dann macht die Datenbank den Rest, ohne dass man die pid im Insert selber braucht!

          bye,
          Helmut

          Muss ich ehrlich gesagt selber passen, ich hab die Datenbank leider nicht angelegt.
          Leider ist das so und ich muss damit leben. Hab auch keine Rechte daran was zu ändern.
          Ich bin grad aktuell dabei das ganze von Hand zu tippen.
          Wenn ich dann die erste Tabelle fertig habe werde ich die komplett kopieren die pid von Hand um den Differenzwert erhöhen und dann die restlichen Werte anpassen.

          Danke dir trotzdem hab wieder mal was gelernt.

          MfG
          Patrick

          Comment

          Working...
          X