0

我有表:

STATUS  DEFECT   DATE

CLOSED  IP       01.01.2012 
CLOSED  TV       03.03.2012
CLOSED  ADSL     05.05.2012
CLOSED  ADSL     11.01.2012 
CLOSED  TV       15.01.2012
NEW     TV         
NEW     TV

我想按月份对每个特定缺陷的计数进行分组。被认为是 CLOSED 的状态

结果表我想成为:

MONTH     TV  ADSL  IP
January   1   1     1
March     1   0     0
May       0   1     0

我正在使用 db2 数据库,所以显示月份的部分是:

select case month(timestamp_iso(DATE))
        when 1 then 'January'
        when 2 then 'February'
        when 3 then 'March'
        when 4 then 'April'
        when 5 then 'May'
        when 6 then 'Jun'
        when 7 then 'July'
        when 8 then 'August'
        when 9 then 'September' 
        when 10 then 'October'
        when 11 then 'November'
        when 12 then 'December'
    end as Month

from TABLE
where  STATUS='CLOSED'
group by month(timestamp_iso(DATE))
order by month(timestamp_iso(DATE))

所以我只需要添加这部分来计数。谢谢

4

1 回答 1

3

您可以使用另一种将计数限制为一个类别中的缺陷的 case 语句来计算缺陷类别:

select case month(timestamp_iso(DATE))
        when 1 then 'January'
        when 2 then 'February'
        when 3 then 'March'
        when 4 then 'April'
        when 5 then 'May'
        when 6 then 'Jun'
        when 7 then 'July'
        when 8 then 'August'
        when 9 then 'September' 
        when 10 then 'October'
        when 11 then 'November'
        when 12 then 'December'
    end as Month,
    count (case when defect = 'TV' then 1 end) TV,
    count (case when defect = 'ADSL' then 1 end) ADSL,
    count (case when defect = 'IP' then 1 end) IP
from TABLE
where  STATUS='CLOSED'
group by month(timestamp_iso(DATE))
order by month(timestamp_iso(DATE))
于 2012-04-17T12:00:12.363 回答