Toon posts:

[MSSQL] SP error handling

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi ppl,

Met de volgende stored procedure kan ik het totaal aantal gewerkte uren van een gebruiker van een week uit de database halen. Om het percentage factuurabele uren te berekenen, deel ik de ene waarde op de andere.

Hier gaat het dus af en toe fout, omdat er een deling door nul voor kan komen.
code:
1
2
3
4
5
6
7
SELECT 
DISTINCT CONVERT(varchar(10),TimeRegistrationDate,105) AS [Datum], 
SUM(TimeRegistrationHours) AS [TotaalUren], 
SUM(TimeRegistrationHoursBilled) AS [TotaalFactuurabel],
SUM((TimeRegistrationHours / TimeRegistrationHoursBilled) * 100) AS [PercentageFactuurabel]
FROM tblTimeRegistration 
...


Als TimeRegistrationHoursBilled 0 is zou ik dus de berekening over willen slaan en PercentageFactuurabel gewoon op 0 zetten. Ik ben na een uurtje zoeken niks wijzer geworden, dus ik hoop dat iemand hier me kan helpen :)

Het gaat trouwens om een MS SQL database.

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
kun je dit niet oplossen door een dubbele query in je sp te plaatsen :?

1. WHERE uurtjes = 0
2. WHERE uurtjes > 0

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


Verwijderd

code:
1
2
3
4
  sum(case
    when TimeRegistrationHoursBilled = 0 then 0
    else (TimeRegistrationHours / TimeRegistrationHoursBilled) * 100
  end) as [PercentageFactuurabel]


Maar klopt je berekening verder wel ? moet je het volgende hebben :

code:
1
(sum(TimeRegistrationHoursBilled) / sum(TimeRegistrationHours)) * 100

1 : Percentage = (Deel / Geheel) * 100%
2 : Je kunt niet de percentages afzonderlijk bij elkaar optellen, maar je moet het percentage van alle waarden bij elkaar berekenen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Je kunt het oplossen door een CASE statement te gebruiken in je SQL Statement.
Je gaat dan nagaan of 'TimeRegistrationHoursBilled' 0 is, en als het 0 is, deel je door 1, anders door TimeRegistrationHoursBilled:

Kijk even in de BOL voor de juiste syntax.

https://fgheysels.github.io/


Verwijderd

Topicstarter
thx, het is gelukt :)

dit is m geworden
code:
1
2
3
4
5
6
7
8
9
10
SELECT 
DISTINCT CONVERT(varchar(10),TimeRegistrationDate,105) AS [Datum], 
SUM(TimeRegistrationHours) AS [TotaalUren], 
SUM(TimeRegistrationHoursBilled) AS [TotaalFactuurabel],
(CASE
    WHEN TimeRegistrationHoursBilled = 0 THEN 0
    ELSE (SUM(TimeRegistrationHoursBilled) / SUM(TimeRegistrationHours)) * 100
END)  AS [PercentageFactuurabel]
FROM tblTimeRegistration 
...


Het werkt nog niet helemaal naar m'n zin, maar het begin is er :)