SQL Server - 需要sum和case语句的帮助

时间:2011-10-30 21:50:00

标签: sql-server sql-server-2005

我正在使用SQL Server 2005.我希望将列(AM,Midday,Evening)加起来以查看哪些列包含值“YES”,然后获取该总数并将其乘以每个为客户排。

这是我到目前为止的查询:

Select 
Sum(Case When morning = 'yes' Then 1 Else 0 End) am_total,
Sum(Case When midday = 'yes' Then 1 Else 0 End) midday_total
From services
where client_id = 24

使用以下输出

am_total    midday_total  
45          49

当我介绍rate变量时,我的查询开始告诉我我需要group_by子句并且我认为我没有为此做好准备,因为我仍然需要先将am_total和midday_total一起添加,然后再乘以比率。

最终,我正在寻找的是总计。

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,也许这就是你需要的

declare @rate int
set @rate = 2 /*what ever rate is */

select am_total * @rate as am, midday_total * @rate as midday
from (
  Select 
   Sum(Case When morning = 'yes' Then 1 Else 0 End) am_total,
   Sum(Case When midday = 'yes' Then 1 Else 0 End) midday_total
  From services
  where client_id = 24
)

您还可以加入另一个表并在计算中使用其列

  Select 
   Sum(Case When morning = 'yes' Then 1 * u.rate Else 0 End) am_total,
   Sum(Case When midday = 'yes' Then 1 * u.rate Else 0 End) midday_total
  From services srv inner join users u on services.id = u.service_id -- assuming this is relation

注意上面的 u.rate