2016-12-01 75 views
2

我有一個表叫xDays設置如下圖所示:選擇列,其中另一列相關的總數爲0

╔══════════════╦═════════════════════════╦═══════╗ 
║ Project_Name ║   Date   ║ Hours ║ 
╠══════════════╬═════════════════════════╬═══════╣ 
║ proj1  ║ 2010-03-03 00:00:00.000 ║  0 ║ 
║ proj1  ║ 2010-03-04 00:00:00.000 ║  0 ║ 
║ proj1  ║ 2010-03-05 00:00:00.000 ║  0 ║ 
║ proj2  ║ 2010-03-03 00:00:00.000 ║  1 ║ 
║ proj2  ║ 2010-03-04 00:00:00.000 ║  0 ║ 
║ proj2  ║ 2010-03-05 00:00:00.000 ║  0 ║ 
╚══════════════╩═════════════════════════╩═══════╝ 

我試圖做的是選擇每個Project_Name誰是總在Hours0。在上面的例子中,SELECT語句應該返回proj1,因爲它總hours爲0,而對於proj2總課時爲1

我得到的最接近是:

select sum(hours) as 'total', project_name 
From xDays 
group by project_name 
order by project_name 

這給了我一個表格顯示每個project_name的總小時數,它顯示0某些project_names的總小時數。從這裏,我已經嘗試了一些不同的東西,要麼得到一個

轉換轉換爲varchar值定義了int類型

錯誤或空結果時失敗。我試過的一些例子:

select sum(hours) as 'total', project_name 
From xDays 
where 'total' = convert(varchar(10), 0) 
group by project_name 
order by project_name` 

這會返回空結果。

select sum(hours) as 'total', project_name 
From xDays 
where 'total' = 0 
group by project_name 
order by project_name 

這會返回轉換錯誤(無法將varchar轉換爲int)。

我如何才能正常工作?

+0

如果所有項目都不應該出現在提取中,那麼所有項目在'xDays'表中是否都有條目?是否有可能將負小時分配給項目? – JohnLBevan

+0

無負面小時。 – pfinferno

+1

注意:'where'total'= 0'這裏你將字符串值'total'(不是列/結果)與0進行比較。 – JohnLBevan

回答

4

您可以用HAVING條款篩選彙總結果:

select sum(hours) as 'total' 
From xDays 
group by project_name 
HAVING sum(hours) = 0 
order by project_name 

HAVING子句只能出現在GROUP BY條款後,不能使用任何列別名

2

請嘗試以下

Select Project_Name 
From xDays 
Group By Project_Name 
Having Sum(Hours)=0 
1

試試這個:

select project_name 
from xDays 
group by project_name 
having sum(xdays.hours) = 0 

您將需要利用THA having條款過濾器的基礎上累計總額

2

假設你想要回報都在xDays表中的所有項目,@PanagiotisKanavos's answer最好的。

特殊場景/注意事項

如果它可能具有不具備在xDays表中的任何條目的項目,但仍希望那些返回(即,因爲在該表不是它的暗示沒有花費在他們身上)。

select project_name 
from Projects 
where project_name not in 
(
    select distinct project_name 
    from xDays 
    where xdays.hours != 0 
) 

如果可能有負小時數,並且您希望那些項目的總小時數等於零的項目(即,其中負片取消正片):

select project_name 
from Projects 
where project_name not in 
(
    select project_name 
    from xDays 
    group by project_name 
    having sum(xdays.hours) != 0 
) 
+1

感謝你們,我實際上有一個單獨的select語句,在xDays表中有條目,但可以使用第一條語句將它們組合在一起。 – pfinferno

相關問題