Announcement

Collapse
No announcement yet.

Logikproblem

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

  • Logikproblem

    Hallo zusammen,

    ich habe leider ein Problem in einer Abfrage und bin mir unsicher ob sich eine Lösung überhaupt realisieren lässt.

    Die Tabelle sieht schematisch so aus:

    Spalte1 |Spalte2 | Spalte3 | Spalte4
    ______________________________
    ART1 |BEZx | 1 | 0
    ART1 |BEZx | 2 | 1
    ART1 |BEZx | 3 | 2
    ART1 |BEZy | 1 | 3

    Meine Abfrage lautet schematisch:

    Select Spalte1, Spalte2, Min(Spalte3)
    from x
    group by Spalte1, Spalte2

    Als Ergebnis erhalte ich die Zeilen 1 und 4

    Nun ist es so, dass ich eigentlich gerne nur die Zeile 4 hätte, also ein Max auf der Spalte 4. Das Problem ist, dass ich den Ausdruck dieser Spalte2 auch benötige. Wenn ich nicht nach dieser Gruppiere, wie kann ich diese als "Wert" mitnehmen?

    Ich hoffe mein Anliegen war verständlich. Hintergrund ist, dass der Wert in "3" in Spalte4 signalisiert, dass Spalte2 korrigiert wurde. Daher möchte ich Zeile 4 bekommen, da die Bezeichnung "Bezx" in diesem Fall hinfällig ist. Aufgrund der Group Funktion über Spalte2 geht das aber nicht.

    Vielleicht habt ihr ne Idee?

    Viele Grüße vom Bodensee

  • #2
    ich musste es mir ein paar mal durchlesen, aber ich denke Du möchtest das hier haben:

    Code:
    select * from tabelle where spalte4=(select max(spalte4) from t)
    Dim
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      hundertprozentig habe ich es auch nicht verstanden, ich denke aber eher an Analytic Functions
      Code:
      WITH data AS
       (SELECT 'ART1' s1, 'BEZx' s2, 1 s3, 0 s4 FROM dual UNION ALL
        SELECT 'ART1' s1, 'BEZx' s2, 2 s3, 1 s4 FROM dual UNION ALL
        SELECT 'ART1' s1, 'BEZx' s2, 3 s3, 2 s4 FROM dual UNION ALL
        SELECT 'ART1' s1, 'BEZy' s2, 1 s3, 3 s4 FROM dual )
      SELECT s1, s2, s3, s4, 
             min(s3) OVER () min_s3, 
             max(s4) OVER (PARTITION BY s1,s2) max_s4 
        FROM data;
      
      S1   S2           S3         S4     MIN_S3     MAX_S4
      ---- ---- ---------- ---------- ---------- ----------
      ART1 BEZx          1          0          1          2
      ART1 BEZx          2          1          1          2
      ART1 BEZx          3          2          1          2
      ART1 BEZy          1          3          1          3
      
      4 rows selected

      Comment


      • #4
        Hallo zusammen. Vielen Dank (hast Dir ja voll den Aufwand gemacht jum).

        Ich bin nun auf die Idee gekommen wie ich es umsetze (auch dank eurer Lösungen). Ich Spalte 4 kann nur 0 und 1 werden. Somit mulipliziere ich mich Spalte 3 und nehme dann das Minimum.

        Spalte 2 lasse ich aus der Group draussen und hole es mir später über die Beziehung Spalte1 || Spaltenmix (3&4) wieder in die Tabelle rein. So brauche ich einen View mehr, aber es klappt. Habe die ganze Zeit eine eindeutige Kennzeichnung gesucht um mir die Daten später wieder anzureichern. Auf die Idee mehrere Spalte zusammenzufassen bin ich nicht gekommen.

        Ich denke so wird es gehen!

        Euch nochmal herzlichen Dank.

        Comment


        • #5
          Hallo,

          vlt. hilft ja auch das hier: Bei "doppelten" Datensätzen nur einen anzeigen

          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

          Working...
          X