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.
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?
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:
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.
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…
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.