比较两个日期的SQL百分比

时间:2012-06-30 11:21:06

标签: sql db2

我的表INCIDENT有行

TICKETID   ACTUALFINISH          TARGETFINISH
100      2012-03-01 11:11:11    2012-02-01 11:11:11 
101      2012-03-01 11:11:11    2012-01-01 11:11:11 
102      2012-04-01 11:11:11    2012-06-01 11:11:11 
103      2012-05-01 11:11:11    2012-07-01 11:11:11 
104        null                        null

我希望target finish大于actual finish且相反的行的百分比。

因此,对于此表,结果将是(不涉及空值):

SLA    PERCENTAGE
YES    50
NO     50

我写了SQL查询但是我一直收到错误。我不知道错误在哪里。

我首先得到的记录总数大于AF大于TF的记录,然后AF小于TF

with HELPTABLE as
    (select count(*) as Total

from incident as incident4

where incident4.targetfinish is not null and incident4.actualfinish is not null )


select distinct  case when incident.targetfinish>incident.actualfinish  then 
                dec((( select count(*)

 from incident as incident1

 where  incident1.targetfinish is not null and incident1.actualfinish is not null  )),10,2)/HELPTABLE.Total*100

 when incident.targetfinish<incident.actualfinish  then 

                dec(((select count(*)

from incident as incident2

where incident2.targetfinish is not null and incident2.actualfinish is not null  )),10,2)/HELPTABLE.Total*100
                    end as Percentage,

        case when incident.targetfinish>incident.actualfinish then 'Yes'
             when incident.targetfinish<incident.actualfinish then 'No'
        end as SLA



from incident

where  incident.targetfinish is not null and incident.actualfinish is not null

如果有人知道什么是错误,谢谢!

  

[错误代码: - 206,SQL状态:42703] DB2 SQL错误:SQLCODE = -206,   SQLSTATE = 42703,SQLERRMC = HELPTABLE.TOTAL,DRIVER = 3.57.82)

1 个答案:

答案 0 :(得分:2)

select 'YES' as SLA, 
(SUM(case when targetfinish > actualfinish  then 1.0 else 0.0 end) / count(*) ) * 100 as PERCENTAGE 
from incident 
where targetfinish is not null and actualfinish is not null
union 
select 'NO' as SLA, 
(SUM(case when targetfinish <= actualfinish  then 1.0 else 0.0 end) / count(*) ) * 100 as PERCENTAGE 
from incident
where targetfinish is not null and actualfinish is not null

http://sqlfiddle.com/#!3/2e903/18