1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

For Each // If then else ?? SQL Query

Dieses Thema im Forum "Allgemeine Diskussionen" wurde erstellt von Kazume, 21 April 2017.

  1. Kazume

    Kazume Benutzer

    Hallo,

    erneut muss ich um Hilfe bitten bei einer "komplexeren?" Problematik.

    In der Tabelle s_order_details stehen bestellte Artikel drin.
    Auf dem Lieferschein bekommen diese eine Position zugeteilt (Pos1, Pos2, Pos3).
    Die Position wird bestimmt wie die Artikel in die Datenbank geschrieben werden, anhand der ID.

    Ordernumber 1001 mit der ID 12 steht auf Pos1
    Ordernumber 1001 mit der ID 13 steht auf Pos2
    Ordernumber 1002 mit der ID 14 steht auf Pos1
    Ordernumber 1002 mit der ID 15 steht auf Pos2
    Ordernumber 1002 mit der ID 16 steht auf Pos3

    Ich würde gerne die Position 1 - n für jeden Artikel daneben stehen haben.


    Falls mir einer Tipps geben könnte wäre das spitze :)
     
  2. akretschmer

    akretschmer Datenbank-Guru

    das ginge mit row_number() over (partition by ordernumber order by pos) - sofern Deine DB row_number() kennt.
     
  3. Kazume

    Kazume Benutzer

    Wenn ich richtig verstanden habe, hast du mich falsch verstanden :D

    Ich habe nur eine Ordernumber & die ID
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Du hast:

    Code:
    test=*# select * from kazume ;
     ordernummer | pos
    -------------+-----
      1001 |  12
      1001 |  13
      1002 |  14
      1002 |  15
      1002 |  16
    (5 Zeilen)
    
    und willst:

    Code:
    test=*# select *, row_number() over (partition by ordernummer order by pos) as position from kazume ;
     ordernummer | pos | position
    -------------+-----+----------
      1001 |  12 |  1
      1001 |  13 |  2
      1002 |  14 |  1
      1002 |  15 |  2
      1002 |  16 |  3
    (5 Zeilen)
    

    Dachte ich zumindest ...
     
  5. Kazume

    Kazume Benutzer

    Gut im prinzip ist das so schon korrekt, außer das die Pos die ID der Tabelle ist.

    row_number() over erkennt er schon mal nicht.

    Bisher habe ich

    Code:
    SET @row_number = 0;
    @row_number := @row_number +1
    
    Jetzt versuche ich nur das irgendwie mit dem "partition by so.ordernumber order by so.id" zu verbinden :D
     
  6. akretschmer

    akretschmer Datenbank-Guru

  7. Kazume

    Kazume Benutzer

    ja
     
  8. akretschmer

    akretschmer Datenbank-Guru

    Tja, das kann das nicht.
     
  9. Kazume

    Kazume Benutzer

    Es ist also bei MySQL nicht möglich soetwas in der Art hinzubekommen?

    Wenn Ordernumber = Ordernumber
    Dann gebe aus 1 - n
    Wenn Ordernumber ungleich Ordernumber
    Dann wiederhole.

    Dann muss man ja nicht unbedingt die ID mitnehmen.
     
  10. Kazume

    Kazume Benutzer

    Ok habs rausbekommen.

    "Use a variable as a table and cross join it with the source table and reset whenever group value changes"
     
    akretschmer gefällt das.

Diese Seite empfehlen