Announcement

Collapse
No announcement yet.

Daten mehrerer Felder in ein Feld schreiben(z.B. pipegetrennt)

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

  • Daten mehrerer Felder in ein Feld schreiben(z.B. pipegetrennt)

    Hallo,

    ich habe eine Prozedur geschrieben die mir pipegetrennte Werte aus einem Feld in meherere Felder eines Datensatzes schreibt. Die Prozedur ist ziemlich groß, enthält eine Schleife und viele Case Statements und noch eine Menge anderer Elemente.
    Nun müsste ich das ganze Spiel umdrehen.
    Es sollen also die Inhalte mehrere Felder in ein Feld pipegetrennt geschrieben werden.
    Ein Beispiel.:

    Ausganstabelle (Tabelle a):

    | ID | Feld 1 | Feld 2 | Feld 3 | Feld 4 |
    -------- ------------ ----------- ----------- ------------
    | 1 | a | b | c | d |

    Resultat (Tabelle b):

    | ID | Datafield |
    ------- ---------------
    | 1 | a|b|c|d |

    Lässt sich das relativ einfach darstellen, oder muss ich hierfür wieder einen zweiseiter Code schreiben?

  • #2
    SELECT ID, Feld1 || '|' || Feld2 || '|' || ....

    Comment


    • #3
      Hallo,

      als String-Concatenator mit Separator gibt es bei MySQL die Funktion CONCAT_WS()

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Concat

        Daran hatte ich auch gedacht, ist eine einfache Lösung, dürfte aber in dem Fall funktionieren. Wenn nicht kann ich ja immer noch mit Schleifen und Cases arbeiten. Danke für eure Ideen.

        Comment


        • #5
          ;

          Lösung über Concat

          Hier die Funktion:

          CREATE PROCEDURE Sageorders()

          BEGIN

          INSERT INTO interface(actiontype, sender, acceptor, status, datafield)
          VALUES(103,'erp','shop','-',(SELECT CONCAT_WS("|", orde_shoporderid, orde_status)
          FROM Sageorders));

          END;

          Folgender Fehler tritt auf, weil nur ein Datensatz der Tabelle Sageorders angesprochen werden kann, aber mehrere vorhanden sind:

          #1242 - Subquery returns more than 1 row

          Wie schreibt man die Concat Funktion, so das alle Datensätze
          der Tabelle Sageorders angesprochen und zusammengefasst werden?

          Comment


          • #6
            So richtig ist mir nicht klar was du da machen willst.

            Soll a) nur EIN Datensatz eingefügt werden, der die concatenierten Felder orde_shoporderid und orde_status der Tabelle Sageorders enthält oder sollen b) x Datensätze (soviel wie in Tabelle Sageorders enthalten sind) mit jeweils den concatenierten Feldern eingefügt werden?

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Sowie du das in b) beschrieben hast, es sollen alle datensätze aus der Sageorders verarbeitet werden!

              Comment


              • #8
                Dann kannst du doch ein INSERT INTO SELECT verwenden:
                [highlight=sql]
                INSERT INTO interface (actiontype, sender, acceptor, status, datafield)
                select 103, 'erp', 'shop', '-', CONCAT_WS('|', orde_shoporderid, orde_status)
                FROM Sageorders
                [/highlight]

                Gruß Falk

                P.S.: Formatierung von SQL in Beiträgen
                Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                Comment


                • #9
                  Vielen Dank! Ich wusste nicht das man auch feste Werte nach einem Select schreiben kann. Wieder etwas gelernt!

                  Comment

                  Working...
                  X