2011-10-30 58 views
0

我正在使用SQL Server 2005.我期待添加列(AM,Midday,Evening)以查看哪些包含值“YES”,然后采用总数乘以客户端每行的费率。SQL Server - 需要sum和case语句的帮助

下面是该查询我到目前为止:

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 

当我介绍率可变,我的查询开始告诉我,我需要的GROUP_BY条款和我不要以为我已经准备好了,因为我仍然需要先将am_total和midday_total加在一起,然后再乘以该值。

最终,我要找的就是总数。

+0

“rate”是该表的一列还是来自别处? (我不确定我是否理解你的问题,因为你说“乘以每个客户的每一行的费率__,然后你说你需要首先总数,然后乘以这个比率。) – Mat

+0

你为什么需要评分?那个变量代表什么,它是表属性还是声明变量? –

+0

客户端可以在数据库中有多行。费率是每行唯一的动态变量。我需要为每行获取总数,然后将所有行添加到一起以获得客户端的总数。 – user721381

回答

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以上

+0

我认为你是在正确的轨道上。我正在编写这个网页(使用ColdFusion)。看起来像使用你的方法,我需要制作一个存储过程,然后这样做,我可以将速率传递给存储过程。我希望,我会尽快回复并报告。 :) – user721381

+0

client_id也将是一个变量,我需要通过,但我可以在那个工作,我得到它为一个客户端工作。 – user721381

+0

不,不幸的是,它没有产生我需要的结果(或者我错误地实施了)。你还有什么? :) – user721381