2017-08-30 64 views
1

我想选择一列值乘以另一列SQL SERVER - 乘另一列

select 
    sum(CS.revenue * count(C.subid)) as [total_revenue] 
from campaigns_history CH 
LEFT OUTER JOIN campaign_sends CS ON CS.campaign_historyID = CH.id 
LEFT OUTER JOIN c C ON C.subid = cast(CS.id as nchar(255)) 
WHERE CH.id=19 

的计数总和的数列值的SELECT SUM我得到这个错误:
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

我该怎么做?

感谢和快乐的编程! :)

+1

基本上你得到这样做的原因是因为你试图通过一个非集合因为行的量是不一样的,SQL-SRV不喜欢这个乘以一个aggergate(COUNT) 。我会用下面的解决方案(通过Eli),因为这是最佳实践 –

+0

谢谢@MikeMirabelli – Eli

+0

@MikeMirabelli,@Eli--请检查我自己的答案,我在解释问题时没有让自己清楚。 'sum(ca)* count(af)'不同于'sum(ca * count(af))' - 第一个是将总和'ca'乘以'af'的次数,第二个是“ca”值的​​总和乘以“af”的数量......这有意义吗?对不起我生锈的英语。 –

回答

1

您需要的SUMCOUNT分开 - 这样:

select 
    SUM(CS.revenue) * COUNT(C.subid) AS [total_revenue] 
FROM campaigns_history CH 
LEFT OUTER JOIN campaign_sends CS ON CS.campaign_historyID = CH.id 
LEFT OUTER JOIN c C ON C.subid = CAST(CS.id as NCHAR(255)) 
WHERE CH.id=19 
0

你的标题已经给你一个答案:)计算总和和计数相乘。

SELECT Sum(CS.revenue) * Count(C.subid) as [total_revenue] 
FROM campaigns_history CH 
    LEFT OUTER JOIN campaign_sends CS ON CS.campaign_historyID = CH.id 
    LEFT OUTER JOIN c C ON C.subid = cast(CS.id as nchar(255)) 
WHERE CH.id = 19 
0

试试这个:

select 
    sum(
     CS.revenue * 
     (select 
      count(c.subid) 
     from c 
     where c.subid = cast(CS.id as nchar(255)) 
     ) as [total_revenue] 
from campaigns_history CH 
LEFT OUTER JOIN campaign_sends CS ON CS.campaign_historyID = CH.id 
WHERE CH.id=19 
0

对不起球员,你的答案didint适合我的需要。
它主要是我的错,因为我没有让自己清楚......

我真正需要的是CS.revenue值乘以的C.subid计数的总和..这是否有道理?对不起我生锈的英语。

为了让词首先乘以CS.revenueC.subid的总数,然后才能得出结果。

我想出了一个查询来返回我期望的结果。

SELECT 
sum(css.total_revenue) 
from (SELECT top 1 * from campaign_sends) as CS 
INNER JOIN (
    select 
    CS.revenue * count(C.subid) as [total_revenue] 
    from campaigns_history CH 
    LEFT OUTER JOIN campaign_sends CS ON CS.campaign_historyID = CH.id 
    LEFT OUTER JOIN c C ON C.subid = cast(CS.id as nchar(255)) 
    WHERE 
    CH.id=19 
    GROUp BY CS.revenue 
) as css ON css.total_revenue is not null