DB2 Pivot (rows to columns)

隐身守侯 提交于 2020-01-17 07:27:21

问题


I have data like this in a DB2 table like below.

Server Name Job ID  Job Status
SERVER_A    00000001    Success
SERVER_A    00000002    Failure
SERVER_A    00000003    Success
SERVER_B    00000004    Failure
SERVER_B    00000005    Failure
SERVER_B    00000006    Failure
SERVER_C    00000007    Success
SERVER_C    00000008    Success
SERVER_C    00000009    Success

I need to display results as below.

Server Name Success Failure
SERVER_A    2   1
SERVER_B    0   3
SERVER_C    3   0

回答1:


Solution 1

select ServerName,
       sum(case when JobStatus='Success' then 1 else 0 end) Success,
       sum(case when JobStatus='Failure' then 1 else 0 end) Failure
from yourtable
group by ServerName



回答2:


Solution 2

select distinct ServerName,
(select count(*) from yourtable f2 where f2.ServerName=f1.ServerName and f2.JobStatus='Success') Success,
(select count(*) from yourtable f2 where f2.ServerName=f1.ServerName and f2.JobStatus='Failure') Failure
from yourtable f1



回答3:


Solution 3

select distinct f1.ServerName, f3.*, f4.*
from yourtable f1
inner join lateral 
(
    select count(*) as Success from yourtable f2 
    where f2.ServerName=f1.ServerName and f2.JobStatus='Success'
) f3 on 1=1
inner join lateral 
(
    select count(*) as Failure from yourtable f2 
    where f2.ServerName=f1.ServerName and f2.JobStatus='Failure'
) f4 on 1=1



回答4:


Solution 4

with StatServer as (
select f1.ServerName, f1.JobStatus, count(*) as nb 
from yourtable f2 
group by f1.ServerName, f1.JobStatus
)
select 
ifnull(f1.ServerName, f2.ServerName) as ServerName,
ifnull(f1.nb, 0) as Success,
ifnull(f2.nb, 0) as Failure
from StatServer f1 full outer join StatServer f2
on f1.ServerName=f2.ServerName and f1.JobStatus='Success' and f1.JobStatus='Failure' 


来源:https://stackoverflow.com/questions/42492501/db2-pivot-rows-to-columns

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!