Announcement

Collapse
No announcement yet.

Korrelierte Unterabfrage oder gleich SQL Proc

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

  • Korrelierte Unterabfrage oder gleich SQL Proc

    Hallo,
    ich habe heute auf Krampf versucht eine SQL Abfrage zu basteln die folgendes leistet: Abfragen der Tabelle D2, ausgewählt werden sollen DS,
    zu jeder DOK_NUMMER jede BLATT_NUMMER mit dem höchsten IDX falls nun AKTUELL_FLAG auf n steht muss der DS ausgegeben werden. Zu jeder DOK_NUMMER gibt ess bliebig viele Einträge mit beliebig vielen Blätterun mit beliebig vielen IDX

    DOK_NUMMER BLATT_NUMMER IDX AKTUELL_FLAG
    459-03059-B01 A0 A n
    459-03059-B01 A0 B Y
    459-03059-B01 D1 A n
    459-03059-B01 D1 B n
    459-03059-B01 D1 C n
    459-03059-B01 D1 D y
    459-03059-B01 B0 A y
    459-03059-B01 B0 B n

    In diesem Datenbeispiel sollte also die letzte Zeile durch die Abfrage erfasst werden:
    459-03059-B01 B1 B n

    Geprüft werden ob AKTUELL_FLAG auf n steht müssten die DS:
    459-03059-B01 A0 B Y
    459-03059-B01 D1 D y
    459-03059-B01 B0 B n

    Also DOK_NUMMER 459-03059-B01 Blatt Nr A0, höchster IDX ist B nun nach AKTUELL_FLAG schauen ...

    Bisher habe ich es nur geschafft mir zu einer DOK_NUMMER die höchste BLATT_NUMMER ausgeben zu lassen. Ok, das brauche ich nicht wirklich. Eigentlich brauche ich ja zu jeder BLATTNUMMER den höchsten IDX
    Code:
    SELECT 
    /* Zeichnungsnummer */
    D1.DOCUMENT_ID AS DOK_NUMMER,
    /* Blattnummer */
    D1.SHEET_NO AS BLATT_NUMMER,
    /* Index */
    D1.DOC_VERSION AS IDX,
    /* Fortschrittskenner */
    D1.LEV_IND AS FK,
    /* Aktualitäts-Flag */
    D1.CUR_FLAG AS AKTUELL_FLAG
    FROM T_DOC_DAT D1
    WHERE EXISTS (
    SELECT max(D1.SHEET_NO) FROM T_DOC_DAT D2 WHERE D2.DOCUMENT_ID=D1.DOCUMENT_ID)
    AND rownum < 10;
    Ja und dann verliesen sie Ihn bzw. mich. Hat evtl. jemand den Durchblick und kann mir diesbezüglich einen Tipp geben?

    Danke im Voraus

  • #2
    Hallo,

    mit einem Subselect sollte das zu lösen sein:
    [highlight=sql]
    select DOK_NUMMER, BLATT_NUMMER, IDX, AKTUELL_FLAG
    from D2 o
    where o.IDX = (
    select max(i.IDX)
    from D2 i
    where i.DOK_NUMMER = o.DOK_NUMMER
    and i.BLATT_NUMMER = o.BLATT_NUMMER)
    and o.AKTUELL_FLAG = 'n'
    [/highlight]

    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


    • #3
      Danke.

      Danke für deinem Tipp, hat wunderbar funktioniert.

      Comment

      Working...
      X