AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Query Hilfe

Ein Thema von Salomon · begonnen am 4. Mär 2008 · letzter Beitrag vom 6. Mär 2008
Antwort Antwort
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#1

SQL Query Hilfe

  Alt 4. Mär 2008, 13:59
Datenbank: MS SQL • Zugriff über: ADO
Hi,
ich brauche schon wieder Hilfe bei einem SQL Query für meine Zeiterfassungssoftware.

Und zwar werden die Zeiten in einer Tabelle TB_AM_Hours gespeichert. Aufbau siehe Anhang.


Nun brauche ich für einen Report ein SQL das folgedes aussgibt:


Delphi-Quellcode:
Date Billable Hours Non-Billable Hrs TotalHrs
====================================================
04.03.08 7 1 8
05.03.08 x y z


Ob die Stunden anrechenbar sind, hängt von FK_ActivityTypeID ab. 1 kann vergütet werden.

Dies selektiert die TotalHrs eine Tages. Wie bekomme ich nun in die selbe Abfrage die Anzahl an Stunden pro Tag die einen von 1 abweichenden Activitätstyp haben?

SQL-Code:
Select ActivityDate, SUM(Timespan) as TotalTime
FROM TB_AM_Hours
WHERE
  FK_UserID = 1
  and ActivityDate >= '03.03.2008 00:00:00'
  and ActivityDate <= '09.03.2008 00:00:00'
  and FK_ProgramID = 1
  and FK_ActivityTypeID = 1
group by ActivityDate;
Gruß
Marcus
Miniaturansicht angehängter Grafiken
tb_hours_861.jpg  
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

Re: SQL Query Hilfe

  Alt 4. Mär 2008, 14:50
Versuch es mal so:
SQL-Code:
Select ActivityDate,
  SUM(CASE FK_ActivityTypeID WHEN 1 THEN Timespan ELSE 0 END) AS 'Billable Hours',
  SUM(CASE FK_ActivityTypeID WHEN 0 THEN Timespan ELSE 0 END) AS 'Non-Billable Hrs',
  SUM(Timespan) as TotalTime
FROM TB_AM_Hours
WHERE
  FK_UserID = 1
  and ActivityDate >= '03.03.2008 00:00:00'
  and ActivityDate <= '09.03.2008 00:00:00'
  and FK_ProgramID = 1
group by ActivityDate;
[edit] Sry, falsches Feld summiert [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#3

Re: SQL Query Hilfe

  Alt 4. Mär 2008, 15:11
Ah super Tipp mit dem Case / Then Habe es ein klein wenig meinen Bedürfnissen angepasst:

SQL-Code:
Select ActivityDate,
  SUM(CASE FK_ActivityTypeID WHEN 1 THEN TimeSpan ELSE 0 END) AS 'BillableHours',
  SUM(CASE WHEN FK_ActivityTypeID <> 1 THEN TimeSpan ELSE 0 END) AS 'NonBillableHours',
  SUM(Timespan) as TotalTime
FROM TB_AM_Hours
WHERE
  FK_UserID = 1
  and ActivityDate >= '03.03.2008 00:00:00
  and ActivityDate <= '09.03.2008 00:00:00
  and FK_ProgramID = 1
group by ActivityDate;
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#4

Re: SQL Query Hilfe

  Alt 5. Mär 2008, 11:26
@DeddyH: Der Weg ist ja das wichtige, und der war richtig gut.

Das ganze würde ich gerne Wochenweise gruppieren. Das bekomme ich leider immer noch nicht hin. In den folgenden Thread hatte ich damit schon einmal angefangen, jedoch habe ich mit der Methode noch Probleme mit dem Jahrewechesel. KW 1 bündelt dort Datums von Anfang des Jahre und vom Ende, was natürlich nicht gewollt ist.
Zeiten Wochenweise bündeln
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#5

Re: SQL Query Hilfe

  Alt 6. Mär 2008, 12:04
Mir ist gerade aufgefallen, das ich das oben beschrieben Problem hier gar nicht habe, da ich den Zeitraum ja fest vorgebe....

Trotzdem wäre es schön noch ein SQL Query zu finden, das ohne den Zeitraum vorzugeben alle Zeiten der Woche X liefert.

Ich habe das Query mal um Überstunden und reguläre Arbeitszeit erweitert. Außerdem ist es jetzt mit einer Kalender Tabelle Wocheweise gruppiert:

SQL-Code:
Select KW, ActivityDate,
  RegularHours =
   Case WHEN SUM(CASE FK_ActivityTypeID WHEN 1 THEN TimeSpan ELSE 0 END)
     <= 480 THEN SUM(CASE FK_ActivityTypeID WHEN 1 THEN TimeSpan ELSE 0 END)
    ELSE 480
   end,

  OvertimeHours =
   Case WHEN SUM(CASE FK_ActivityTypeID WHEN 1 THEN TimeSpan ELSE 0 END)
     > 480 THEN (SUM(CASE FK_ActivityTypeID WHEN 1 THEN TimeSpan ELSE 0 END) - 480)
    ELSE 0
   end,

  SUM(CASE FK_ActivityTypeID WHEN 1 THEN TimeSpan ELSE 0 END) AS 'BillableHours',
  SUM(CASE WHEN FK_ActivityTypeID <> 1 THEN TimeSpan ELSE 0 END) AS 'NonBillableHours',
  SUM(Timespan) as TotalTime
FROM TB_AM_Hours H left join TB_AM_Calendar C on
  CONVERT(varchar(8), H.ActivityDate, 112) = CONVERT(varchar(8), C.Date , 112)
WHERE
  FK_UserID = 1
  and ActivityDate >= '03.03.2008 00:00:00
  and ActivityDate <= '09.03.2008 00:00:00
  and FK_ProgramID = 1
group by KW, ActivityDate;
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz