Announcement

Collapse
No announcement yet.

Kennt Oracle sowas wie "group by 1,2,3,4,6,8..." was unter Informix geht???

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

  • Kennt Oracle sowas wie "group by 1,2,3,4,6,8..." was unter Informix geht???

    Hallo.

    Habe hier noch ein weiteres Problem mit Oracle.
    Unter Informix kann man recht einfach ein SQL-Stament mit group by aufbauen, indem man group by einfach Integerwerte übergibt, die für die Spaltennamen im Select-Teil stehen.
    z.B.:
    <pre>select xyz.A, xyz.B, xyz.C, xyz.D
    from xyz
    group by 1, 2, 3
    order by 1</pre>
    Praxisbeispiel:
    <pre>select (YEAR(current) - YEAR(personendaten.geburtsdatum)) Age,
    count (distinct vorgang.vorgangsnummer) anzahl
    from personendaten, vorgang
    group by 1
    order by 1</pre>
    <br>
    Wie löst man sowas elegant unter Oracle? Irgendwie kann ich mich nicht so richtig in diese "Oracle-Denkweise" versetzen.

    MfG,

    Delphi Greenhorn

  • #2
    Ja.

    müsste funktionieren.

    Allerdings meint Oracle schon seit Version 8 das man so nicht mehr programmieren sollte. Das wird warscheinlich in zukünftigen Versionen nicht mehr unterstützt. Deshalb Finger weg davon.

    Mach Dein Group by lieber auf den Spaltennamen (Übrigens kannst Du auch Spalten benutzen welche in der Ausgabe garnicht auftauchen) oder auf den Alias.
    z.Bsp.
    select (YEAR(current) - YEAR(personendaten.geburtsdatum)) Age,
    count (distinct vorgang.vorgangsnummer) anzahl
    from personendaten, vorgang
    group by Age
    order by Age

    Müsste IMHO klappen.

    Viel Glüc

    Comment


    • #3
      Hallo Steven,

      habe rausgefunden, dass es beim Order by noch recht gut funktioniert. Beim Group by meint 9.2.0.1 es wäre kein Group by Statement. Ich habe dann auch noch versucht den Group by Teil mit Age durchzuführen, so wie du es im Statement beschrieben hast. Hat aber leider auch nicht funktioniert, bin mit meinem Latein am Ende.
      Hier nochmal mein Statement...
      <pre>select (to_number(to_char(sysdate,'yyyy')) - to_number(to_char(n_personendaten.geburtsdatum, 'yyyy'))) Age,
      count(distinct n_vorgang.vorgangsnummer) anzahl
      from n_personendaten, n_vorgang
      group by Age
      order by Age</pre>

      Gruß,

      Delphi Greenhor

      Comment


      • #4
        Hallo,

        Soweit ich es nachvollziehen kann, werden Aliase im GROUP BY von Oracle nicht unterstützt. Du mußt demnach den kompletten Ausdruck wie im SELECT angeben:<pre>
        select
        (to_number(to_char(sysdate,'yyyy')) - to_number(to_char(n_personendaten.geburtsdatum, 'yyyy'))) Age,
        count(distinct n_vorgang.vorgangsnummer) anzahl
        from n_personendaten, n_vorgang
        group by
        (to_number(to_char(sysdate,'yyyy')) - to_number(to_char(n_personendaten.geburtsdatum, 'yyyy')))</pre>

        Das nachvolgende ORDER BY kann weggelassen werden, da ein GROUP BY immer auch eine entsprechende Sortierung zur Folge hat.

        Gruß Fal
        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


        • #5
          Ergänzung: Aliase sind möglich, wenn ich eine In-Statement-View verwende:<pre>
          select
          Age, count(distinct vorgangsnummer) anzahl
          from (
          select
          (to_number(to_char(sysdate,'yyyy')) - to_number(to_char(n_personendaten.geburtsdatum, 'yyyy'))) Age,
          n_vorgang.vorgangsnummer
          from n_personendaten, n_vorgang)
          group by
          Age;</pre>

          Irgendwie fehlt hier aber noch der Join! Oder ist das Kreuzprodukt der beiden Tabellen n_personendaten, n_vorgang gewünscht?

          Gruß Fal
          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


          • #6
            Hallo Falk,

            danke erstmal für den klasse Tipp. Da wäre ich wohl nie drauf gekommen. Funktioniert wunderbar. Das mit dem View muss ich noch ausprobieren.
            Ein Kreuzprodukt an dieser Stelle ist sogar erwünscht.

            MfG,

            Delphi Greenhor

            Comment

            Working...
            X