2017-06-16 54 views
1

我想從某個ftable中選擇某個文件名,日期,學位名稱的總數,完成和重命名數據如果存在計算上的用戶名條件的用戶名,如果用戶名不存在算作其餘爲已完成如何在使用group by的單個查詢中獲得多個計數記錄以及其他記錄

---------------------------------------- 
file_nm | degree_nm| date_nm | user_nm 
---------------------------------------- 
X  | D_x  |02/05/2013| USER3 
X  | D_x  |02/05/2014| NULL 
Y  | D_y  |02/05/2012| USER1 
z  | D_z  |02/05/2015| NULL 
Y  | D_y  |02/05/2013| USER1 
z  | D_z  |02/05/2012| USER2 

我想file_nm,degree_nm,date_nm明智計數總文件,剩下的文件,完成

file total for x is 2 remaining for x is 1 completed file is 1 

我在多個單個查詢中獲得正確的值,但我想這個小號整個

select filenm,degree_name,date_name,COUNT(*) as total 
from sameTable 
group by filenm,degree_name,date_name 

select filenm,degree_name,date_name,COUNT(*) as remaining 
from sameTable 
group by filenm,degree_name,date_name,username 
having username is null 
select filenm,degree_name,date_name,COUNT(*) as completed 
from sameTable 
group by filenm,degree_name,date_name,username 
having username is not null 

O/P,我想

filenm,degree_name,date_name,total,remaining,completed 
+1

這不是你如何使用'having' – JohnHC

+0

@JohnHC感謝約翰注意到,不要爲什麼我使用:-)。我的錯。 –

回答

0

總和案例:

select filenm, 
     degree_name, 
     date_name, 
     COUNT(*) as total, 
     sum(case when username is null then 1 else 0 end) as remaining, 
     sum(case when username is not null then 1 else 0 end) as complete 
from sameTable 
group by filenm,degree_name,date_name 
+0

只是「,」總是失蹤,否則每件事情都在工作,因爲我想要感謝你 –

0
select filenm 
    ,degree_name 
    ,date_name 
    ,total = COUNT(*) 
    ,remaining = COUNT(DISTINCT CASE WHEN username is null THEN username ELSE NULL END) 
    ,completed = COUNT(DISTINCT CASE WHEN username is not null THEN username ELSE NULL END) 
from sameTable 
group by filenm,degree_name,date_name 
+0

感謝你的時間和精力的朋友。但是我沒有得到我想要的東西。剩下的每個文件都是0,完成的是0/1,順便說明你的總數是正確的。 –

相關問題