【问题标题】:sum the case expression with aggregate function用聚合函数对 case 表达式求和
【发布时间】:2013-04-10 05:48:43
【问题描述】:

在我的一个应用程序中,我想将 case 表达式与聚合函数相加。

我尝试了以下查询

Select Name,Sum(Case When MIN(arrival_time) = MAX(arrival_time) then 1 Else 0 End) as arrivedate from TableName group by Name

但是我遇到了这样的错误。

Msg 130, Level 15, State 1, Line 1
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

请找出我的问题。 提前致谢

【问题讨论】:

    标签: .net sql sql-server-2008


    【解决方案1】:

    聚合函数中不能有聚合函数,也就是说你不能做

    sum(min(..) )
    

    尝试:

    select Name,Sum(Val) as arrivedate 
    from (
        SELECT name , (Case When MIN(arrival_time) = MAX(arrival_time) then 1 Else 0 END) Val
        FROM TableName
        group by Name
    ) x
    group by Name
    

    但是,你真的需要 SUM 吗?我觉得:

    SELECT name , (Case When MIN(arrival_time) = MAX(arrival_time) then 1 Else 0 END) Val
    FROM TableName
    group by Name
    

    会以任何方式为您提供相同的结果,因为内部查询和外部查询都按名称分组

    【讨论】:

      【解决方案2】:

      请尝试:

      select 
          Name, 
          Sum(Case When MN = MX then 1 Else 0 End) arrivedate
      from(
          select Name, Min(arrival_time) MN, max(arrival_time) MX From TableName
          group by Name
      )x
      group by Name
      

      【讨论】:

        【解决方案3】:

        您正在尝试对也跨越记录的最小值和最大值求和(跨越多条记录)。您需要重做查询,首先获取最小值/最大值,然后执行 sum 语句检查它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-19
          • 1970-01-01
          • 1970-01-01
          • 2014-02-24
          • 1970-01-01
          相关资源
          最近更新 更多