Announcement

Collapse
No announcement yet.

Daten aus Tabelle konvertieren und in neue Tabelle einfügen

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

  • Daten aus Tabelle konvertieren und in neue Tabelle einfügen

    Hallo,

    bin neu hier also erstmal ein freundliches Hallo an alle!
    Nun zu meinem Problem:

    Ich möchte Daten aus diesem Format
    1/2007-01-01/Hund,Katze,Maus
    2/2007-02-01/Katze,Maus
    3/2006-12-01/Hund

    In dieses Formar bringen:
    1/2007-01-01/Hund
    1/2007-01-01/Katze
    1/2007-01-01/Maus
    2/2007-02-01/Katze
    2/2007-02-01/Maus
    3/2006-12-01/Hund


    Eine Funktion, welche die Komma getrenten Felder extrahiert und in eine temporäre Tabelle schreibt habe ich schon.
    Habe aber keine Ahnung wie ich die restlichen Daten jetzt noch dazu bekommen.

    Das ganze auf einem SQL Server 2005.

    Vielen Dank und Gruß
    tibazi
    Zuletzt editiert von tibazi; 09.02.2007, 17:53.

  • #2
    Warum benutzt du dann nicht die selbe Funktion, die dir die beiden Felder vorne auslesen, anstatt mit dem Trennzeichen , mit dem Trennzeichen / ?

    Somit hättest du in einem Array die Position, das Datum und im dritten Feld Hund, Katze, Maus.
    Wenn du jetzt deine Funktion über das dritte Feld laufen lässt, bekommst du auch noch die einzelnen Tierarten und kannst dann in einer Schleife alles abspeichern.

    Comment


    • #3
      Hallo Andreas,

      vielen Dank für die Antwort.

      Mit dem /(Slash) wollte ich nur anzeigen das es sich um eine Tabelle mit drei Spalten handelt.

      Im ersten Feld also der Schlüssel, im zweiten Feld das Datum und im dritten Feld die Zeichenkette mit verschiedenen Werten durch eine Komma getrennt.

      Ich will jetzt die Komma getrennten Werte auslesen und auf mehrere Zeilen aufteilen. Der Schlüssel und das Datum sollen dazu passend mitgenommen werden.

      bis dann,

      Timo

      Comment


      • #4
        Hallo,

        durch die Kombination von einem CURSOR mit einer lokalen TABLE-Variable kann die Transformation umgesetzt werden:

        Ausgangsmenge:

        <div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"><p style="margin: 0px;">id&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; datum&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; werte</p><p style="margin: 0px;"><span style="color: green;">----------- ----------------------- -------------------</span></p><p style="margin: 0px;">1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 2007-02-01 00:00:00.000 Hund,Katze,Maus</p><p style="margin: 0px;">2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 2007-02-02 00:00:00.000 Katze,Maus</p><p style="margin: 0px;">3&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 2007-02-03 00:00:00.000 Hund</p></div>

        Zielmenge:

        <div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"><p style="margin: 0px;">id&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; datum&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; werte</p><p style="margin: 0px;"><span style="color: green;">----------- ----------------------- -----------</span></p><p style="margin: 0px;">1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 2007-02-01 00:00:00.000 Hund</p><p style="margin: 0px;">1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 2007-02-01 00:00:00.000 Katze</p><p style="margin: 0px;">1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 2007-02-01 00:00:00.000 Maus</p><p style="margin: 0px;">2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 2007-02-02 00:00:00.000 Katze</p><p style="margin: 0px;">2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 2007-02-02 00:00:00.000 Maus</p><p style="margin: 0px;">3&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 2007-02-03 00:00:00.000 Hund</p></div>

        Implementierung:

        <div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"><p style="margin: 0px;"><span style="color: blue;">USE </span>tempdb</p><p style="margin: 0px;">GO</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: blue;">CREATE TABLE </span>NewTbl</p><p style="margin: 0px;">(</p><p style="margin: 0px;">&nbsp; id&nbsp;&nbsp;&nbsp; <span style="color: blue;">INT </span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">NOT NULL</span>,</p><p style="margin: 0px;">&nbsp; datum <span style="color: blue;">DATETIME </span>&nbsp;&nbsp; <span style="color: blue;">NOT NULL</span>,</p><p style="margin: 0px;">&nbsp; werte <span style="color: blue;">VARCHAR</span>(99) <span style="color: blue;">NOT NULL</span></p><p style="margin: 0px;">)</p><p style="margin: 0px;">GO</p><p style="margin: 0px;"><span style="color: blue;">CREATE TABLE </span>OldTbl</p><p style="margin: 0px;">(</p><p style="margin: 0px;">&nbsp; id&nbsp;&nbsp;&nbsp; <span style="color: blue;">INT </span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">NOT NULL PRIMARY KEY</span>,</p><p style="margin: 0px;">&nbsp; datum <span style="color: blue;">DATETIME </span>&nbsp;&nbsp; <span style="color: blue;">NOT NULL</span>,</p><p style="margin: 0px;">&nbsp; werte <span style="color: blue;">VARCHAR</span>(99) <span style="color: blue;">NOT NULL</span></p><p style="margin: 0px;">)</p><p style="margin: 0px;">GO</p><p style="margin: 0px;"><span style="color: blue;">INSERT INTO </span>dbo.OldTbl <span style="color: blue;">VALUES </span>(1,<span style="color: #a31515;">'20070201'</span>,<span style="color: #a31515;">'Hund,Katze,Maus'</span>);</p><p style="margin: 0px;"><span style="color: blue;">INSERT INTO </span>dbo.OldTbl <span style="color: blue;">VALUES </span>(2,<span style="color: #a31515;">'20070202'</span>,<span style="color: #a31515;">'Katze,Maus'</span>);</p><p style="margin: 0px;"><span style="color: blue;">INSERT INTO </span>dbo.OldTbl <span style="color: blue;">VALUES </span>(3,<span style="color: #a31515;">'20070203'</span>,<span style="color: #a31515;">'Hund'</span>);</p><p style="margin: 0px;">GO</p><p style="margin: 0px;"><span style="color: green;">-- Ausgangsdaten</span></p><p style="margin: 0px;"><span style="color: blue;">SELECT </span>id,datum,werte <span style="color: blue;">FROM </span>dbo.OldTbl;</p><p style="margin: 0px;">GO</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: green;">-- ################################################## ##########</span></p><p style="margin: 0px;"><span style="color: green;">-- # Transformation &#252;ber einen CURSOR und eine TABLE-Variable</span></p><p style="margin: 0px;"><span style="color: green;">-- ################################################## ##########</span></p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: green;">-- Zieltabelle leere</span></p><p style="margin: 0px;"><span style="color: blue;">TRUNCATE TABLE </span>NewTbl;</p><p style="margin: 0px;"><span style="color: green;">-- Daten von OldTbl nach NewTbl umkopieren</span></p><p style="margin: 0px;"><span style="color: blue;">DECLARE </span>@id <span style="color: blue;">INT</span>;</p><p style="margin: 0px;"><span style="color: blue;">DECLARE </span>@datum <span style="color: blue;">DATETIME</span>;</p><p style="margin: 0px;"><span style="color: blue;">DECLARE </span>@werte <span style="color: blue;">VARCHAR</span>(99);</p><p style="margin: 0px;"><span style="color: blue;">DECLARE </span>@Tbl <span style="color: blue;">TABLE </span>(s <span style="color: blue;">VARCHAR</span>(19))</p><p style="margin: 0px;"><span style="color: blue;">DECLARE </span>@In <span style="color: blue;">VARCHAR</span>(19)</p><p style="margin: 0px;"><span style="color: blue;">DECLARE </span>@i <span style="color: blue;">INT</span></p><p style="margin: 0px;"><span style="color: blue;">SET </span>@i = -1</p><p style="margin: 0px;"><span style="color: blue;">DECLARE </span>cOldTbl <span style="color: blue;">CURSOR LOCAL </span>FAST_FORWARD </p><p style="margin: 0px;">&nbsp; <span style="color: blue;">FOR SELECT </span>id,datum,werte <span style="color: blue;">FROM </span>dbo.OldTbl; </p><p style="margin: 0px;"><span style="color: blue;">OPEN </span>cOldTbl </p><p style="margin: 0px;"><span style="color: blue;">FETCH NEXT FROM </span>cOldTbl <span style="color: blue;">INTO </span>@id,@datum,@werte </p><p style="margin: 0px;"><span style="color: blue;">WHILE </span>(@@FETCH_STATUS=0)&nbsp; </p><p style="margin: 0px;">&nbsp; <span style="color: blue;">BEGIN </span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">SET </span>@In = @werte;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">WHILE </span>(Len(@In) &gt; 0)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">BEGIN</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">SET </span>@i = <span style="color: blue;">CHARINDEX</span>(<span style="color: #a31515;">',' </span>, @In)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">IF </span>(@i = 0) <span style="color: blue;">AND </span>(LEN(@In) &gt; 0)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">BEGIN</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">INSERT INTO </span>@Tbl <span style="color: blue;">VALUES </span>(@In)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">BREAK</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">END</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">IF </span>(@i &gt; 1)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">BEGIN</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">INSERT INTO </span>@Tbl <span style="color: blue;">VALUES </span>(<span style="color: blue;">LEFT</span>(@In, @i - 1))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">SET </span>@In = <span style="color: blue;">RIGHT</span>(@In, (LEN(@In) - @i))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">END</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">ELSE </span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">SET </span>@In = <span style="color: blue;">RIGHT</span>(@In, (LEN(@In) - @i))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">END</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">INSERT INTO </span>dbo.NewTbl</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">SELECT </span>@id, @datum, s <span style="color: blue;">FROM </span>@Tbl; </p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">DELETE FROM </span>@Tbl;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">FETCH NEXT FROM </span>cOldTbl <span style="color: blue;">INTO </span>@id,@datum,@werte&nbsp; </p><p style="margin: 0px;">&nbsp; <span style="color: blue;">END </span></p><p style="margin: 0px;"><span style="color: blue;">CLOSE </span>cOldTbl </p><p style="margin: 0px;"><span style="color: blue;">DEALLOCATE </span>cOldTbl </p><p style="margin: 0px;"><span style="color: green;">-- Ergebnis anzeigen</span></p><p style="margin: 0px;"><span style="color: blue;">SELECT </span>* <span style="color: blue;">FROM </span>dbo.NewTbl;</p></div>

        Comment


        • #5
          Prima, Vielen Dank für die Antwort das ist genau das was ich gesucht habe.

          bis dann,

          tibazi

          Comment

          Working...
          X