[NEWSboard IBMi Forum]
Seite 2 von 2 Erste 1 2

Thema: Sql Abfrage

  1. #13
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    ILE:
    %int(Datum/10000) * 10000 + 0101;

    SQL:
    floor(Datum / 10000) * 10000 + 0101
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  2. #14
    Registriert seit
    Apr 2012
    Beiträge
    360
    Danke für eure Antworten und Hilfen.

    Gruß
    Tarki

  3. #15
    Registriert seit
    Apr 2012
    Beiträge
    360
    Hallo Herr Fuerchau,

    ich habe eine Datei, wo Abteilungen mit Datum, und Preisen hinterlegt sind.

    Wie erhalte ich eigentlich im Sql, nur einen Satz, der gerade aktuell ist, ohne das ich die anderen lesen müssen?

    Gruß

    Tarki

  4. #16
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hast Du neben dem Datum und dem Preis auch noch andere Informationen z.B. Artikel-Nr. in der Datei?

    Sofern Du nur den Preis mit dem höchsten Datum willst, kannst Du diesen wie folgt ermitteln:

    Code:
    Select Datum, Preis
    From Datei
    Order By Datum Desc
    Fetch First Row Only
    Sofern Du zusätzlich z.B. auch noch die Artikel-Nr. hast und den Preis nur für einen bestimmten Artikel willst, kannst Du die gleiche Abfrage nehmen und fügst eine WHERE-Bedingung ein, mit der nur der entsprechende Artikel ausgewählt wird.

    Sofern Du den jeweils den aktuellen Preis von allen Artikeln willst wird die Sache etwas komplexer, d.h. Du brauchst entweder ein verschachteltes (Sub-)Select oder eine Common Table Expression, durch die zunächst das letzte Datum pro Artikel ermittelt wird. Das Ergebnis verknüpfst Du dann mit der eigentlichen Tabelle/Datei.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  5. #17
    Registriert seit
    Apr 2012
    Beiträge
    360
    Danke Frau Hauser,

    Goldrichtiges Statement.

    Gruß

    Tarki

  6. #18
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Empfehlenswert ist in diesem Fall auch ein Index mit "Datum desc".
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #19
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Empfehlenswert ist in diesem Fall auch ein Index mit "Datum desc".
    Zugriffsweg mit Datum reicht (zumindest wenn die Abfrage von der SQE ausgeführt wird). SQL verarbeitet auf- und absteigend.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #20
    Registriert seit
    Apr 2012
    Beiträge
    360
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Sofern man die Feldlänge nicht verändern möchte, d.h. nur ein 8-stelliges numerisches Feld mit 8-Zeichen incl. den führenden Nullen anzeigen möchste, ist die Funktion DIGITS eleganter:

    Code:
    Select Digits(NumFld) concat Digits(NextNum) concat X ...
    Anstatt der double pipe (||) würde ich empfehlen immer CONCAT anzugeben. Die double pipe wird nicht in allen Umgebungen unterstützt, d.h. manchmal muss man stattdessen ein doppeltes Ausrufezeichen (!!) angeben.

    Birgitta
    Hallo Brigitta,

    mein Problem mit dem Sql-Problem besteht noch immer.

    ich habe mal die num. Werte gecatet(FINR_ART_LFD).

    Aber besteht die Möglichkeit das ich mehrere Felder(FILEA.W1FINR, FILEA.W1ART#, FILEA.W1LFD#,
    FILEB.W1FNR, FILEA.W2TX1, FILEA.W2TX2,
    FILEB.W1TX1, FILEB.W1TX2) in ein Distinct zusammenfassen kann, sodass mir keine doppelten Sätze angezeigt werden?

    Mein SqlStatement:
    SELECT
    Digits(FILEA.W1FINR) CONCAT Digits(FILEA.W1ART#) CONCAT
    Digits(FILEA.W1LFD#) as FINR_ART_LFD,
    FILEB.W1FNR, FILEA.W2TX1, FILEA.W2TX2,
    FILEB.W1TX1, FILEB.W1TX2, MIN(FILEB.W1STMP), count(*)

    FROM FILEA, FILEB
    WHERE
    FILEA.W1FINR = FILEB.W1GNR AND FILEA.W1ART# = FILEB.W1TNR
    AND FILEA.W1LFD# = FILEB.W1ZNR AND FILEB.W1STMP > 20120101

    Group by
    FILEA.W1FINR, FILEA.W1ART#, FILEA.W1LFD#,
    FILEB.W1FNR, FILEA.W2TX1, FILEA.W2TX2,
    FILEB.W1TX1, FILEB.W1TX2, FILEB.W1STMP

    Order by
    FILEA.W1FINR, FILEA.W1ART#, FILEA.W1LFD#,
    FILEB.W1FNR, FILEA.W2TX1, FILEA.W2TX2,
    FILEB.W1TX1, FILEB.W1TX2, FILEB.W1STMP


    Dank im Voraus und Gruß

    TARKI

  9. #21
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Die Syntax wäre folgende:

    select ...
    from (select distinct ... from myfile where ...)
    group by ...
    order by ...
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #22
    Registriert seit
    Apr 2012
    Beiträge
    360
    Hallo Herr Fuerchau,

    habe alle erdenklich Varianten probiert bekomme aber das von Ihnen angegeben Statement nicht gebacken bekommen.
    Könnten Sie mir anhand nur einiger weniger Felder ein Beispiel anführen?

    Danke

  11. #23
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Die Syntax wäre folgende:

    select ...
    from (select distinct ... from myfile where ...)
    group by ...
    order by ...
    Da verschachtelte Sub-Selects schnell unübersichtlich werden, würde ich lieber common table expressions (CTE) verwenden:

    Code:
    With x as (Select Distinct (oder was sonst auch immer)
                      From ...
                      Where ....)
    Select ....
    From x (join Tabellen/Views sofern erforderlich)
    Where ...
    ;
    Eine Anmerkung zum Group By:
    In der Group By-Anweisung müssen alle Spalten aufgelistet werden, bei denen keine Aggreagat-Funktion (z.B. Count, Sum) verwendet wurde. Handelt es sich bei einer solchen Spalte um einen Ausdruck (z.B. verkettete oder berechnete Werte), so muss der komplette Ausdruck in der Group By-Anweisung wiederholt werden.
    Es sei den man verwendet ein verschachteltes Sub-Select oder eine CTE in der die Spalten definiert sind.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Similar Threads

  1. Einfache Abfrage in COBOL/400 mit EXEC SQL
    By AS400-Anfänger in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 27-06-06, 13:18
  2. Abfrage nach <> Ziffern in SQL
    By behmer in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 29-05-06, 12:52
  3. sql abfrage
    By steven_r in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 17-05-06, 15:49
  4. Problem bei Abfrage bei Imbedded SQL
    By cbe in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 08-06-05, 16:21
  5. sql abfrage mit substring
    By juergenkemeter in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 17-11-04, 14:32

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •