Hi,
I'm not replying with an answer, but with a similar problem. I am using a
TRAC database on top of a SQLite DB and I want to provide a percentage of
the sum total hours/sum estimated hours. Here's what I'm seeing.
- when only one value (a natural number) is summed and divided, the answer
is 0 (should be 73/100=73%).
- when multiple lines are summed and divided && the some of the lines have
fractions (like 7.25, 1.33, etc.), then the answer is correct.
- when multiple lines are summed and divided && the lines are all natural
numbers, then the answer is 0.
My query is below. Does this make any sense?
SELECT __color__, __group__, __style__, ticket, summary, component ,
__milestone__, status, owner, Estimated_work, Total_work,
Percentage_Complete, _ord
FROM (
SELECT p.value AS __color__,
t.component AS __group__,
'' as __style__,
t.id AS ticket, summary AS summary, -- ## Break line here
component, milestone as __milestone__, status, owner,
CASE WHEN EstimatedHours.value = '' OR EstimatedHours.value IS NULL
THEN 0
ELSE CAST( EstimatedHours.value AS DECIMAL ) END as Estimated_work,
CASE WHEN totalhours.value = '' OR totalhours.value IS NULL THEN 0
ELSE CAST( totalhours.value AS DECIMAL ) END as Total_work,
time AS created, -- ## Dates are formatted
changetime AS _changetime,
ROUND((totalhours.value/EstimatedHours.value)*100, 2) as
Percentage_Complete,
reporter AS _reporter
,0 as _ord
FROM ticket as t
JOIN enum as p ON p.name=t.priority AND p.type='priority'
LEFT JOIN ticket_custom as EstimatedHours ON
EstimatedHours.name='estimatedhours'
AND EstimatedHours.Ticket = t.Id
LEFT JOIN ticket_custom as totalhours ON totalhours.name='totalhours'
AND totalhours.Ticket = t.Id
WHERE 1==1
UNION
SELECT '1' AS __color__,
t.component AS __group__,
'background-color:#DFE;' as __style__,
'' as ticket, '' AS summary,
'Remaining hrs on this charge code' as component,
t.milestone as __milestone__,
CAST(
SUM(CASE WHEN EstimatedHours.value = '' OR EstimatedHours.value IS
NULL THEN 0
ELSE CAST( EstimatedHours.value AS DECIMAL ) END) -
SUM(CASE WHEN totalhours.value = '' OR totalhours.value IS NULL THEN
0
ELSE CAST( totalhours.value AS DECIMAL ) END)
AS CHAR(512)) as status,
'Baseline Est. for this code/Hours Billed already:' as owner,
SUM(CASE WHEN EstimatedHours.value = '' OR EstimatedHours.value IS
NULL THEN 0
ELSE CAST( EstimatedHours.value AS DECIMAL ) END) as
Estimated_work,
SUM(CASE WHEN totalhours.value = '' OR totalhours.value IS NULL THEN
0
ELSE CAST( totalhours.value AS DECIMAL ) END) as Total_work,
'' as created,
'' AS _changetime,
CAST(
ROUND(100*(SUM(CASE WHEN totalhours.value = '' OR totalhours.value IS
NULL THEN 0
ELSE CAST( totalhours.value AS DECIMAL ) END) /
SUM(CASE WHEN EstimatedHours.value = '' OR EstimatedHours.value IS
NULL THEN 0
ELSE CAST( EstimatedHours.value AS DECIMAL ) END)), 2)
AS CHAR(512)) as Percentage_Complete,
'' AS _reporter, 1 as _ord
FROM ticket as t
JOIN enum as p ON p.name=t.priority AND p.type='priority'
LEFT JOIN ticket_custom as EstimatedHours ON
EstimatedHours.name='estimatedhours'
AND EstimatedHours.Ticket = t.Id
LEFT JOIN ticket_custom as totalhours ON totalhours.name='totalhours'
AND totalhours.Ticket = t.Id
GROUP BY t.component
) as tbl
ORDER BY __group__, _ord ASC, ticket
--
View this message in context:
http://www.nabble.com/Strange-behavior-with-sum-tp4673782p21729338.html
Sent from the SQLite mailing list archive at Nabble.com.
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users