Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Wie SELECT DISTINCT aber nur auf eine Spalte bezogen

Dieses Thema im Forum "Firebird und Interbase" wurde erstellt von barney, 22 September 2012.

  1. barney

    barney Neuer Benutzer

    Hallo

    Ich habe eine Bürosoftware mit Firebird DB welche ich eine Abfrage erstellen möchte.
    Und zwar benötige ich alle Preise der Artikel von jeder Rechnung welche bezahlt ist.
    Nun leider habe ich auch Rechnungen mit mehreren Zahlungseingängen (Teilzahlung oder auch Abschlagsrechnung) und im Ergebnis der Abfrage werden die Artikelpreise für jeden Zahlungseingang der Rechnung einmal ausgegeben. Also bei einer Rechnung mit 5 Artikeln erhalte ich 5 Artikelpreise (GUT). Aber bei einer Rechnung mit 5 Artikeln welche die Rechnung in 2 Teilen bezahlt wurde, erhalte ich 10 Artikelpreise - also doppelt (SCHLECHT).

    Wenn man jetzt ein Select Distinct machen könnte welches NUR auf MOV_INVOICES_POSITIONS.ID bezogen ist, wäre es super. Da dies scheinbar nicht möglich ist und durch eine Verschachtelung gemacht werden muss, habe ich Probleme damit. Bin nur gerade so gut einige Schnippels zusammen zu führen oder einfache Abfragen zu machen.
    Hier die ganze Abfrage:

    SELECT
    MOV_INVOICES_POSITIONS.ID,
    MOV_INVOICES.INVNO as Rechnungsnummer,
    SUP_COSTCATEGORIES.LABEL as Erloesart,
    MOV_ORDERS_POSITIONS.TOTALGROSS_AD as ArtikelSumme,
    LEFT(MOV_PAYMENTS.PAYDATE,10) as Zahlungsdatum

    FROM
    MOV_PAYMENTS
    LEFT JOIN MOV_INVOICES on MOV_INVOICES.ID = MOV_PAYMENTS.INVID
    LEFT JOIN MOV_INVOICES_POSITIONS on MOV_INVOICES_POSITIONS.INVID = MOV_INVOICES.ID
    LEFT OUTER JOIN MOV_ORDERS_POSITIONS ON (MOV_INVOICES_POSITIONS.ORDPOSID = MOV_ORDERS_POSITIONS.ID)
    LEFT JOIN BAS_ARTICLES on BAS_ARTICLES.ID = MOV_INVOICES_POSITIONS.ARTID
    LEFT JOIN SUP_COSTCATEGORIES on SUP_COSTCATEGORIES.ID = BAS_ARTICLES.COST_CATEGORY

    WHERE MOV_PAYMENTS.INVID is not null
    and BAS_ARTICLES.ARTKIND < 10
    and EXTRACT(MONTH FROM MOV_PAYMENTS.PAYDATE) > 6

    ORDER BY
    MOV_INVOICES_POSITIONS.ID

    Kann mir jemand helfen?

    Danke schon mal
     
  2. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Hy,

    warum du mehrere Zeilen bekommstr ist klar!

    Du lässt dir das Rechnungsdatum ausgeben (LEFT(MOV_PAYMENTS.PAYDATE,10) as Zahlungsdatum)

    Wäre es möglich hier nur das neueste auszugeben oder auch garnicht, dann greift auch dein DISTINCT....


    Lg
     
  3. ukulele

    ukulele Datenbank-Guru

    DISTINCT würde nicht funktionieren, GROUP BY würde greifen, wenn nur das höchste Zahldatum ausgegeben würde.
     
  4. barney

    barney Neuer Benutzer

    Vielen Dank.
    Ich habe es jetzt nochmals versucht wie es ist, aber mit SELECT DISTINCT und es scheint korrekt zu sein...(?!!)
    Verstehe es gerade nicht, weil letztes mal hat mir das DISTINCT auch die Beträge gefiltert (es kann ja sein das 2x 9.90 verrechnet wurde was korrekt wäre...).
    Also suche ich jetzt noch weiter Fehler. Letztes mal als ich es getestet habe, hatte ich irgendwo eine Differenz zwischen Auswertung und Kontobuchungen.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden