[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jul 2002
    Beiträge
    151

    select distinct und order by - V5R2Mo abbruch

    Hallo all,
    ich bekomme in einer ADO.NET-Anwendung folgenden SQL abbruch:
    auf der Iseries läuft V5R2M0
    Failed to execute database command: 'SELECT DISTINCT T0."SALE_ID", T0."SALEDATE", T0."PROBABILITY", T0."STATUS", T0."HEADING", T0."AMOUNT", T3."NAME", T1."NAME", T4."NAME", T0."PERSON_ID", T5."FIRSTNAME", T5."MIDDLENAME", T5."LASTNAME", VARCHAR(T2."TEXT", 2048), T0."PROJECT_ID", T0."CONTACT_ID", T0."EARNING", T0."EARNING_PERCENT", T0."ASSOCIATE_ID", T0."GROUP_IDX", T0."VISIBILITY", T0."DONE", T0."REGISTERED", T0."REGISTERED_ASSOCIATE_ID", T3."CONTACT_ID", T3."ASSOCIATE_ID", T3."BUSINESS_IDX", T3."GROUP_ID", T3."REGISTERED", T3."REGISTERED_ASSOCIATE_ID", T3."XSTOP", T4."PROJECT_ID", T4."ASSOCIATE_ID", T4."GROUP_ID", T4."REGISTERED", T4."REGISTERED_ASSOCIATE_ID", T5."PERSON_ID", T5."ASSOCIATE_ID", T5."GROUP_ID", T5."REGISTERED", T5."REGISTERED_ASSOCIATE_ID", T5."RETIRED", T7."CONTACT_ID", T7."ASSOCIATE_ID", T7."BUSINESS_IDX", T7."GROUP_ID", T7."REGISTERED", T7."REGISTERED_ASSOCIATE_ID", T7."XSTOP" FROM CRM5."SALE" T0 LEFT OUTER JOIN CRM5."CURRENCY" T1 ON (T0."CURRENCY_ID" = T1."CURRENCY_ID") LEFT OUTER JOIN CRM5."TEXT" T2 ON (T0."TEXT_ID" = T2."TEXT_ID") LEFT OUTER JOIN CRM5."CONTACT" T3 ON (T0."CONTACT_ID" = T3."CONTACT_ID") LEFT OUTER JOIN CRM5."PROJECT" T4 ON (T0."PROJECT_ID" = T4."PROJECT_ID") LEFT OUTER JOIN CRM5."PERSON" T5 ON (T0."PERSON_ID" = T5."PERSON_ID") INNER JOIN CRM5."VISIBLEFOR" T6 ON (T0."SALE_ID" = T6."RECORDID" AND (T6."TABLEID" = @P0) AND(((((T6."FORALL" = @P1) OR(T6."FORASSOCID" = @P2))) OR(T6."FORGROUPID" IN(@P3, @P4))))) LEFT OUTER JOIN CRM5."CONTACT" T7 ON (T5."CONTACT_ID" = T7."CONTACT_ID") WHERE T0."SALE_ID" = @P5 ORDER BY UPPER(T0."HEADING") ASC'
    On Database: 'IBM.Data.DB2.iSeries.iDB2Connection'

    Der Abbruch ist berechtigt weil im Select das T0.heading ohne UPPER steht.
    Jetzt meine Frage :

    Ist dies in Versin V5R3M0 eine gültige Anweisung (muss ich einen Releasewechsel machen???) !

    Gruss Holger

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hallo Holger,

    Wenn Distinct und Order By in einem Select-Statement verwendet werden, müssen die Order By-Spalten mit den im Select angegebenen Spalten übereinstimmen.

    Das ist auch unter Release V5R4 so.

    Das einzige, was Du machen kannst, ist eine zusätzliche Spalte beim Select mit Upper(Feld) angeben oder die Sortierreihenfolge von HEX auf LangIdShr oder LangIdUnq ändern.

    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

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Die OrderBy-Klausel darf nur Feldnamen, die in diesem Fall im Select enthalten sein müssen, aufführen.
    SQL-Funktionen wie UPPER sind hier nicht erlaubt:

    select UPPER(T0."HEADING"), ...
    ORDER BY T0."HEADING" ASC'
    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

  4. #4
    Registriert seit
    Jul 2002
    Beiträge
    151
    Hallo Baldur,
    ich stimme da nur Birgitta zu:
    SELECT distinct location, UPPER(LOCATION)
    FROM appointment WHERE PROJECT_ID >
    9290 ORDER BY UPPER(LOCATION)
    SELECT-Anweisung vollständig verarbeitet.

    funzt auch unter V5R2M0.
    Gruss Holger

    Aber intersessant zu wissen, dass das so unter 5.4 auch nicht geht - das war ja meine eigentliche Frage.
    Weiß jemand evtl. ob das unter SQL-Server von Kleinweich oder oracle funktioniert wenn in Order By was anderes steht als in select?
    Danke

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    nach SQL Standard ist order by eine Funktion des Result Sets und was man da nicht drin hat, danach kann man gemäß elementarer Logik nicht sortieren. Ohne das distinct könnte man das upper(ebbes) mit aufnehmen und dann ignorieren, mit dem distinct kann man da nochwas über einen join zusammen basteln, oder die Sortierfolge austricksen, wenn die Fußnägel das noch mitmachen ohne sich aufzurollen.

    mfg

    Dieter Bender

    Zitat Zitat von holly Beitrag anzeigen
    Hallo Baldur,
    ich stimme da nur Birgitta zu:
    SELECT distinct location, UPPER(LOCATION)
    FROM appointment WHERE PROJECT_ID >
    9290 ORDER BY UPPER(LOCATION)
    SELECT-Anweisung vollständig verarbeitet.

    funzt auch unter V5R2M0.
    Gruss Holger

    Aber intersessant zu wissen, dass das so unter 5.4 auch nicht geht - das war ja meine eigentliche Frage.
    Weiß jemand evtl. ob das unter SQL-Server von Kleinweich oder oracle funktioniert wenn in Order By was anderes steht als in select?
    Danke
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. CREATE FUNCTION mit select im Bauch ?
    By cheffe1008 in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 21-09-06, 16:05
  2. sql select mit zusätzl. Feldern
    By rr2001 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 07-07-06, 09:56
  3. Cobol-Programm mit Embedded SQL (SELECT CASE)
    By klausgkv in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 08-06-06, 13:47
  4. select 10 größte Werte je Ordnungsbegriff
    By holly in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 16-05-06, 12:45
  5. SQL: DISTINCT und RRN?
    By Akku in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 10-05-06, 08:07

Berechtigungen

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