Zeilen zusammenfassen

bernhardk

Neuer Benutzer
Beiträge
3
Hallo Community, ich habe folgendes Problem und leider noch nichts in einem anderen Forum gefunden.
Ich habe ein Statement welches mir zwei Zeilen auswirft worin es um die Berechnung des Resturlaubs in Tagen und aliquot geht. Diese rechnen sich aus zwei verschiedenen Bezugsartennummern heraus: Hier das statement
SELECT
mit_mitarbnr as Pnr
,per_originalname as Name
,PER_KOSTENSTELLE as Kostenstelle
,KST_KOSTENSTAMMBEZ as Bezeichnung
,MIT_FIRMENNR as Firma
,convert(date,PER_FG_EINTRITTSDATUM) as Ersteintrittsdatum
,mit_urlaub_anspruch as 'Anspruch in T'
,CONCAT(Datepart(Day,PER_FG_EINTRITTSDATUM), '.', Datename(Month,PER_FG_EINTRITTSDATUM)) as 'Anspruch neu mit'
,convert(date,PER_EINTRITTSDATUM) as Eintrittsdatum
,case when ZMS_ZBEZUGSARTNR = '9900' then 'Resturlaub in T'
when ZMS_ZBezugsartnr = '9901' then 'Urlaub aliquot' end as Bezugsart
,convert(date,ZMS_ZMSDATUM) as Stichtag
,year(ZMS_ZMSDATUM) as Jahr
,case when ZMS_ZBEZUGSARTNR = '9900' then (ZMS_ZMSDAUER / 3600)
when ZMS_ZBEZUGSARTNR = '9901' then (ZMS_ZMSDAUER / 3600) end as 'Tage'


Das ist das Ergebnis: (gekürzt)
upload_2018-4-26_11-37-39.png

ich hätte nun aber gerne eine Spalte Tage Urlaub und eine mit aliquot Tage nebeneinander anstatt untereinander.

Gibt es hier eine simple Lösung? Danke im Voraus

FG
 
Werbung:
Um Dir die Richtung zu zeigen:

Code:
test=# create table bernhardk(s1 text, s2 text, s3 text, art text, tage int);
CREATE TABLE
test=*# insert into bernhardk values ('spalte1','spalte2','spalte3','art 1',10);
INSERT 0 1
test=*# insert into bernhardk values ('spalte1','spalte2','spalte3','art 2',20);
INSERT 0 1
test=*# select s1, s2, s3, sum(case when art = 'art 1' then tage else 0 end) as "Tage Art 1", sum(case when art = 'art 2' then tage else 0 end) as "Tage Art 2" from bernhardk group by s1,s2,s3;
  s1  |  s2  |  s3  | Tage Art 1 | Tage Art 2
---------+---------+---------+------------+------------
 spalte1 | spalte2 | spalte3 |  10 |  20
(1 Zeile)
 
elegantere Variante:

Code:
test=*# select s1, s2, s3, sum(tage) filter (where art = 'art 1') as "Tage Art 1", sum(tage) filter (where art = 'art 2') as "Tage Art 2" from bernhardk group by s1,s2,s3;
  s1  |  s2  |  s3  | Tage Art 1 | Tage Art 2
---------+---------+---------+------------+------------
 spalte1 | spalte2 | spalte3 |  10 |  20
(1 Zeile)

Allerdings verstehen viele billige Datenbanken die FILTER-Anweisung nicht.
 
Hallo akretschmer :) Vielen Dank für die schnellen Rückmeldungen, nachdem ich in SQL aber noch ein ziemlicher Anfänger bin und grundsätzlich nicht aus der IT stamme, könntest du mir sagen wie ich dies in mein Statement (oben erwähnt) einbauen müsste?

Danke
 
Du könntest Dein Statement als Subselect oder als CTE verwenden und meines on-top. Also a la

select <insert my statement here> from (your statement) foo

oder

with x as (insert your statement here) select <insert my statement here>
 
Werbung:
Zurück
Oben