我有一个名为xDays
的表,如下所示:
╔══════════════╦═════════════════════════╦═══════╗
║ 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
列中Hours
列的总0
proj1
。在上面的示例中,select语句应返回hours
,因为它的总proj2
为0,而select sum(hours) as 'total', project_name
From xDays
group by project_name
order by project_name
的总小时数为1.
我最接近的是:
0
这给了我一个表格,显示每个project_name的总小时数,显示某些project_names的总小时数 select sum(hours) as 'total', project_name
From xDays
where 'total' = convert(varchar(10), 0)
group by project_name
order by project_name`
。从这里开始,我尝试了一些不同的东西,然后得到一个
将varchar值转换为datatype int
时转换失败
错误或空结果。我试过的一些例子:
select sum(hours) as 'total', project_name
From xDays
where 'total' = 0
group by project_name
order by project_name
返回空结果。
Song
这会返回转换错误(无法将varchar total转换为int)。
我怎样才能使其正常工作?
答案 0 :(得分:4)
您可以使用HAVING子句过滤汇总结果:
select sum(hours) as 'total'
From xDays
group by project_name
HAVING sum(hours) = 0
order by project_name
HAVING
子句只能出现在GROUP BY
子句之后,并且不能使用任何列别名
答案 1 :(得分:2)
尝试以下
Select Project_Name
From xDays
Group By Project_Name
Having Sum(Hours)=0
答案 2 :(得分:2)
假设您要报告的所有项目都在xDays表中,up button是最好的。
特殊情景/注意事项
如果有可能让A
表中没有任何条目的项目,但您仍然希望返回这些条目(即,因为不在该表中,它'' s暗示他们没有花费任何时间)。
xDays
如果可能有负时数,并且您希望那些项目的总小时数等于零的项目(即负数取消正数):
select project_name
from Projects
where project_name not in
(
select distinct project_name
from xDays
where xdays.hours != 0
)
答案 3 :(得分:1)
试试这个:
select project_name
from xDays
group by project_name
having sum(xdays.hours) = 0
您需要使用tha having
子句根据总计