Ergebnis 1 bis 10 von 10

Thema: Gruppierung nach Teilstring einer Spalte

  1. #1
    minor_73 ist offline Benutzer
    Registriert seit
    16.11.2009
    Beiträge
    57

    Standard Gruppierung nach Teilstring einer Spalte

    Hab da wieder mal ne Frage :-)
    Ich habe eine Tabelle in der Zeiten pro Projekt gespeichert sind. Nun gibt es bei den Projektnummern
    gewisse Gruppen, gekennzeichnet durch gewisse Ziffern o.ä., z.B.:

    Gruppe allg: gekennzeichnet durch die 0 an 2.3. und 4.Stelle:
    6000A1
    6000B4

    Prozessnumemr geklennzeichnet durch das P an 2. Stelle:
    6P01E5
    6P03ZZ

    Management gekennzeichnet durch das M auf der zweiten Stelle:
    6M0001

    Hauptprojekte gekennzeichet durch Zahlen auf der 2., 3. und 4. Stelle (aber nicht 000)
    6123A1
    6244B5

    Z-Projekte gekennzeichnet durch ein Z auf der 2. Stelle:

    6Z0125
    6Z02EE

    ...


    Hab grade keine Ahnung ob das durch einen SQL zu machen ist.
    Kann mir einer von euch weiter helfen.

    Danke schon mal

    Gruß
    Andreas

  2. #2
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Ich habe ja noch nicht mal eine Idee, was genau du machen willst. Du hast keine Frage gestellt ;-)
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  3. #3
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von minor_73 Beitrag anzeigen
    Hab da wieder mal ne Frage :-)
    Ich habe eine Tabelle in der Zeiten pro Projekt gespeichert sind. Nun gibt es bei den Projektnummern
    gewisse Gruppen, gekennzeichnet durch gewisse Ziffern o.ä., z.B.:

    Gruppe allg: gekennzeichnet durch die 0 an 2.3. und 4.Stelle:
    6000A1
    6000B4



    ...


    Hab grade keine Ahnung ob das durch einen SQL zu machen ist.
    Kann mir einer von euch weiter helfen.

    Danke schon mal

    Gruß
    Andreas
    Ich weiß zwar nicht, was Du machen willst, aber es geht bestimmt!!!1elf.

    Laut Glaskugel vielleicht aber sowas hier:

    Code:
    test=*# select * from projekte ;
       id   | wert
    --------+------
     1a0001 |   10
     1a0002 |   20
     2b0003 |   11
    (3 rows)
    
    test=*# select substring(id,2,1), sum(wert) from projekte group by 1;
     substring | sum
    -----------+-----
     b         |  11
     a         |  30
    (2 rows)
    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  4. #4
    minor_73 ist offline Benutzer
    Registriert seit
    16.11.2009
    Beiträge
    57

    Standard

    hmm lass mal sehen,
    ich kann das leider nicht so schön darstellen wie ihr, aber im Grunde will ich folgendes:

    Tabellen Inhalt
    Priojekt: Stunden:
    6000A1 12
    6000B4 10
    6P01E5 3
    6P03ZZ 5
    6M0001 2,5
    6123A1 3
    6244B5 5
    6Z0125 4
    6Z02EE 3

    Jetzt hätt ich gern als Output die Summe der Stunden auf "Projektart", also:

    6000 22 --> Gruppierung auf Projekte die mit 6000 anfangen
    6P 8 --> Gruppierung auf Projekte die mit 6P beginnen
    6M 2,5 --> Gruppierung auf Projekte die mit 6M beginnen
    6zzz 8 --> Gruppierung auf Projekte die mit 6 beginnen gefolgt von 3 Zahlen
    6Z 7 --> Gruppierung auf Projekte die mit 6Z beginnen


    Ich weiß nicht wie ich mich anders ausdrücken soll :-)
    Geht sowas überhaupt über SQL??
    Ist es einigermasen klar?

    Danke

    Gruß
    Andreas

  5. #5
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von minor_73 Beitrag anzeigen
    hmm lass mal sehen,
    ich kann das leider nicht so schön darstellen wie ihr, aber im Grunde will ich folgendes:
    Das geht mit code-Tags, also eckige Klammer auf, code, Klammer zu. Beenden mit Klammer auf, \, code, Klammer zu.

    Tabellen Inhalt
    Priojekt: Stunden:
    6000A1 12
    6000B4 10
    6P01E5 3
    6P03ZZ 5
    6M0001 2,5
    6123A1 3
    6244B5 5
    6Z0125 4
    6Z02EE 3

    Jetzt hätt ich gern als Output die Summe der Stunden auf "Projektart", also:

    6000 22 --> Gruppierung auf Projekte die mit 6000 anfangen
    6P 8 --> Gruppierung auf Projekte die mit 6P beginnen
    6M 2,5 --> Gruppierung auf Projekte die mit 6M beginnen
    6zzz 8 --> Gruppierung auf Projekte die mit 6 beginnen gefolgt von 3 Zahlen
    6Z 7 --> Gruppierung auf Projekte die mit 6Z beginnen


    Ich weiß nicht wie ich mich anders ausdrücken soll :-)
    Geht sowas überhaupt über SQL??
    Ist es einigermasen klar?

    Danke

    Gruß mal ein
    Andreas
    Ja. Deine Gruppe "6000" beginnt mit 6, gefolgt von 3 Ziffern. Das gilt auch für Deine Gruppe 6zzz (laut Beschreibung). Ansonsten mal dieser Ansatz:

    Code:
    test=*# select * from projekte ;
       id   | wert
    --------+------
     6000A1 |   12
     6000B4 |   10
     6P01E5 |    3
     6P03ZZ |    5
     6M0001 |    2
     6123A1 |    3
     6244B5 |    5
     6Z0125 |    4
     6Z02EE |    3
    (9 rows)
    
    test=*# select sum(case when id ~ '^6000' then wert else 0 end) as "6000", sum(case when id ~'^6p' then wert else 0 end) as "6P", sum(case when id~'^6Z' then wert else 0 end) as "6Z" from projekte ;
     6000 | 6P | 6Z
    ------+----+----
       22 |  0 |  7
    (1 row)
    Andere Lösung: einzelne Selects, diese durch UNION zusammenkleben, fertig.

    Code:
    test=*# select '6000' as gruppe, sum(wert) from projekte where id ~'6000' group by 1 union  select '6P', sum(wert) from projekte where id ~'^6P' group by 1;
     gruppe | sum
    --------+-----
     6000   |  22
     6P     |   8
    (2 rows)
    Wegens massiver faulheit hab ich das mal nur für 2-3 Guppen gemacht...


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  6. #6
    minor_73 ist offline Benutzer
    Registriert seit
    16.11.2009
    Beiträge
    57

    Standard

    wow, bin beeindruckt, komm heut leider nicht mehr zum testen.
    Melde aber morgen gleich das Ergebnis :-)

    Danke schon mal

  7. #7
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von akretschmer Beitrag anzeigen
    Das geht mit code-Tags, also eckige Klammer auf, code, Klammer zu. Beenden mit Klammer auf, \, code, Klammer zu.



    Ja. Deine Gruppe "6000" beginnt mit 6, gefolgt von 3 Ziffern. Das gilt auch für Deine Gruppe 6zzz (laut Beschreibung). Ansonsten mal dieser Ansatz:

    Code:
    test=*# select * from projekte ;
       id   | wert
    --------+------
     6000A1 |   12
     6000B4 |   10
     6P01E5 |    3
     6P03ZZ |    5
     6M0001 |    2
     6123A1 |    3
     6244B5 |    5
     6Z0125 |    4
     6Z02EE |    3
    (9 rows)
    
    test=*# select sum(case when id ~ '^6000' then wert else 0 end) as "6000", sum(case when id ~'^6p' then wert else 0 end) as "6P", sum(case when id~'^6Z' then wert else 0 end) as "6Z" from projekte ;
     6000 | 6P | 6Z
    ------+----+----
       22 |  0 |  7
    (1 row)
    Andere Lösung: einzelne Selects, diese durch UNION zusammenkleben, fertig.

    Code:
    test=*# select '6000' as gruppe, sum(wert) from projekte where id ~'6000' group by 1 union  select '6P', sum(wert) from projekte where id ~'^6P' group by 1;
     gruppe | sum
    --------+-----
     6000   |  22
     6P     |   8
    (2 rows)
    Wegens massiver faulheit hab ich das mal nur für 2-3 Guppen gemacht...


    Andreas
    Da ist natürlich ein Fipptehler drin im Code...


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  8. #8
    minor_73 ist offline Benutzer
    Registriert seit
    16.11.2009
    Beiträge
    57

    Standard

    Danke Andreas für die Antwort,
    habe es versucht und es klappt echt schon super, bis auf den einen Fall:

    es gibt Projekte die beginnen mit 6000 und andere die mit 6 gefolgt von drei Zahlen, die kleinste also 6001

    Also bräucht ich für zum Beispiel:
    Code:
    6000A0     12
    6000BD     5
    6124A0     4
    6244B3     3
    600054     2
    ouput sollte dann sowas sein:

    Code:
    6000       19
    6xxx         7
    hast du mir hierfür vielleicht noch ne Lösung? Kann man in SQL vielleicht reguläre Ausdrücke anweden oder so?

    Wäre echt super.

    Danke schon mal


    Gruß
    Andreas

  9. #9
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von minor_73 Beitrag anzeigen

    hast du mir hierfür vielleicht noch ne Lösung? Kann man in SQL vielleicht reguläre Ausdrücke anweden oder so?
    Ja, PostgreSQL kann mit regulären Ausdrücken recht gut umgehen. Ich hoffe, diese Aussage ist nun endlich genug Anreiz, dies in der Doku mal nachzulesen.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  10. #10
    minor_73 ist offline Benutzer
    Registriert seit
    16.11.2009
    Beiträge
    57

    Standard

    Hab die Doku gelesen, fündig wurd ich aber über RegEx.
    Die Lösung schaut so aus:

    sum(case when pgt_tbl_tprj.tpr_pze !~ '^6000' and pgt_tbl_tprj.tpr_pze ~ '^6[0-9][0-9][0-9]' then pgt_tbl_buchung.bng_zeit else 0 end)

    Danke nochmal :-)

    Gruß
    Andreas

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 21.12.2010, 15:18
  2. Gruppierung und Summe aus einer Abfrage
    Von ipConfig im Forum SQL
    Antworten: 2
    Letzter Beitrag: 18.02.2010, 12:32
  3. Spalte nach Bedingung aktualisieren
    Von bnagus im Forum SQL
    Antworten: 5
    Letzter Beitrag: 03.02.2010, 15:52
  4. Zeilen zur einer Spalte zusammenfügen
    Von Sauerkraut im Forum SQL
    Antworten: 5
    Letzter Beitrag: 22.08.2009, 12:07
  5. Berechnungen mit Daten aus einer Spalte
    Von Dassoud im Forum SQL
    Antworten: 2
    Letzter Beitrag: 18.01.2008, 15:33

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum