I have a simple query here:
select
WorkedHours =
(SELECT
CASE WHEN SUM(BillableSeconds) is not null
THEN SUM(BillableSeconds)
ELSE 0
END
FROM Worklog WHERE IssueId = 188625
)
from Worklog where IssueId=188625
When I pass an IssueId that does match the criteria, the CASE works, but when I willingly pass an IssueId that I know will return no rows, 0 is not being returned.
I get this in SQL studio:
The idea here is to determine whether the sum is NULL, 0 or greater so a CAST to decimal doesn’t yield an error.
What am I missing here ?
Advertisement
Answer
I think you just want this:
select COALESCE(SUM(BillableSeconds), 0) as WorkedHours from Worklog where IssueId = 188625;
This is an aggregation query that always returns one row, even if the where clause filters everything out.
In your version, the outer query returns one row for every matching row in the table. If no rows match, no row is returned.
