Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Eine Quelltabelle zweimal mit verschiedenen Zeiträumen durchsuchen und alles in nur eine Zieltabelle

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Christian_T, 23 August 2015.

  1. Christian_T

    Christian_T Benutzer

    Hallo Leute,

    ich habe da mal wieder eine Aufgabe. ;-)

    Quelltabelle:
    Datum | Stundenart | Stunden
    01.02.2015 Urlaub 10
    01.03.2015 Krank 10
    01.04.2015 Urlaub 10
    01.02.2014 Urlaub 10
    01.03.2014 Sonderurlaub 10

    Ich möchte mit EINEM Aufruf einer Stored Procedure folgende Zieltabelle erreichen:
    Stundenart | Summe2015 | Summe2014
    Urlaub 20 10
    Krank 10 0

    Mir fehlt momentan die Idee wie ich in einem Aufruf an alle Infos komme. :-(

    Besten Dank im voraus,
    Christian
     
  2. Walter

    Walter Administrator Mitarbeiter

    GROUP BY ist Dein Freund :)
     
  3. Christian_T

    Christian_T Benutzer

    Wie kann ich in der GROUP BY den Zeitraum angeben in dem gruppiert werden soll?
    z. B. Datum >= 01.01.2015 AND Datum <= 31.12.2015
    und dann nochmal ein GROUP BY für 2014??
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=*# select * from christian ;
      datum  |  stundenart  | stunden
    ------------+--------------+---------
     2015-02-01 | urlaub  |  10
     2015-03-01 | krank  |  10
     2015-04-01 | urlaub  |  10
     2014-02-01 | urlaub  |  10
     2014-03-01 | sonderurlaub |  10
    (5 rows)
    
    test=*# select stundenart, sum(stunden) filter (where extract(year from datum) = 2014) as "Summe2014", sum(stunden) filter (where extract(year from datum) = 2015) as "Summe2015" from christian group by stundenart;
      stundenart  | Summe2014 | Summe2015
    --------------+-----------+-----------
     urlaub  |  10 |  20
     sonderurlaub |  10 |
     krank  |  |  10
    (3 rows)
    
    
     
  5. Christian_T

    Christian_T Benutzer

    Das sieht doch genau nach dem aus was ich brauche! :)
    Besten Dank und ich wünsche Dir einen schönen Wochenendausklang.:)
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Danke. Muß noch arbeiten, aber egal. Ich verwende PostgreSQL, kann sein, daß die Syntax bei Dir nicht sofort paßt.
     
  7. Christian_T

    Christian_T Benutzer

    So ein Sch.... , das SQL Management Studio 2014 nimmt das FILTER-Schlüsselwort nicht.
     
  8. akretschmer

    akretschmer Datenbank-Guru

    das ist nicht das Management Studio, sondern die DB. Versuch es mit CASE WHEN ...
     
  9. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=*# select stundenart, sum(stunden) filter (where extract(year from datum) = 2014) as "Summe2014", sum(case when extract(year from datum) = 2015 then stunden else 0 end) as "so geht es mit case when ..."  from christian group by stundenart;
      stundenart  | Summe2014 | so geht es mit case when ...
    --------------+-----------+------------------------------
     urlaub  |  10 |  20
     sonderurlaub |  10 |  0
     krank  |  |  10
    (3 rows)
    
     
  10. Christian_T

    Christian_T Benutzer

    Danke nochmal!
    CASE WHEN hat MS SQL 2014 angenommen.
    Sind die Schlüsselwörter auch schon in MS SQL 2005 bekannt?
     
  11. akretschmer

    akretschmer Datenbank-Guru

    Keine Ahnung, schau halt in die Doku. Oder nehme gleich PG ;-)
     
  12. ukulele

    ukulele Datenbank-Guru

    CASE sollte auch in 2005 gehen. Bei der Aufgabe könnte man aber auch PIVOT verwenden.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden