2017-07-17 111 views
0

我寫了一個查詢,增加了上週工作時間。如何返回sum函數的空值?

select laborcode, sum(regularhrs) as TOTALACTUALS 
from labtrans 
where (laborcode='a' OR laborcode='b' OR laborcode='c' OR laborcode='d' 
OR laborcode='e' OR laborcode='f') and (startdate BETWEEN DATEADD(day, DATEDIFF(day, 7, getdate()), 0) and DATEADD(day, DATEDIFF(day, 0, getdate()), 0)) 
group by laborcode; 

比方說,勞動「a」有從上週0小時,我的結果是:

b 25,5 
c 37,25 
d 24 
e 48,5 
f 25,5 

,但我希望得到勞動「是」太多,但與空值。例如:

a 0 (or null) 
b 25,5 
c 37,25 
d 24 
e 48,5 
f 25,5 
+0

試試這個isnull(sum(name),0) – Muj

+0

你有你的勞工代碼表嗎? – Jens

+1

@Muj這是行不通的,因爲你沒有得到一行勞動代碼a – Jens

回答

0

使用條件SUM

select laborcode 
    , sum(CASE WHEN startdate BETWEEN DATEADD(day, DATEDIFF(day, 7, getdate()), 0) and DATEADD(day, DATEDIFF(day, 0, getdate()), 0) THEN regularhrs END) as TOTALACTUALS 
from labtrans 
where laborcode in('a','b','c','d','e','f') 
group by laborcode; 

或者左加入到predifined列表

SELECT l.laborcode, sum(d.regularhrs) as TOTALACTUALS 
from (
    values ('a'),('b'),('c'),('d'),('e'),('f') 
    ) l(laborcode) 
left join labtrans d on d.laborcode = l.laborcode and (d.startdate BETWEEN DATEADD(day, DATEDIFF(day, 7, getdate()), 0) and DATEADD(day, DATEDIFF(day, 0, getdate()), 0)) 
group by l.laborcode 
+0

第一個工作,很容易理解,謝謝。 –

0

左加入您的值進行分組,以labourcodes列表:

select distinct b.labourcode, coalesce(a.TotalHours,0) as TotalHours 
from labtrans b 
left join 
(
    select a.laborcode, sum(a.regularhrs) as 
    from labtrans a 
    where a.labourcode in ('a','b','c','d','e','f') 
    and a.startdate BETWEEN DATEADD(day, DATEDIFF(day, 7, getdate()), 0) and DATEADD(day, DATEDIFF(day, 0, getdate()), 0) 
    group by a.laborcode 
) 
on a.labourcode = b.labourcode 
+0

如果勞動法是動態的先生,怎麼樣? – Muj

+0

@Muj then'在(@labourcode)'中的a.labourcode' – JohnHC