2017-02-27 167 views
-2

我在下面的DB2表中有這樣的數據。DB2 Pivot(行到列)

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 

我需要顯示如下結果。

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

你打算尋找答案嗎? – Charles

+0

是的,我找不到相關的答案 – Kevin

回答

1

溶液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 
+0

優秀!!你所有的解決方案都能工非常感謝。欣賞它。 – Kevin

+0

非常歡迎:) – Esperento57

1

溶液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 
1

溶液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 
1

解決方案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'