【问题标题】:SUM() of calculated field计算字段的 SUM()
【发布时间】:2012-01-20 01:44:32
【问题描述】:

我有这个查询:

select 
C.One
,C.Two
,C.Three
,C.Four

from mytable C

where C.One = 11052 and C.Three = 97734

这会返回:

One  |Two | Three  | Four
11052   2   97734   4
11052   2   97734   4
11052   2   97734   4
11052   2   97734   4
11052   2   97734   4
11052   2   97734   4
11052   2   97734   4
11052   2   97734   4
11052   2   97734   4
11052   2   97734   4
11052   1   97734   4
11052   1   97734   4
11052   1   97734   4
11052   1   97734   4
11052   1   97734   4
11052   1   97734   4
11052   1   97734   4
11052   1   97734   4
11052   1   97734   4
11052   1   97734   4
11052   3   97734   4
11052   3   97734   4
11052   3   97734   4
11052   3   97734   4
11052   3   97734   4
11052   3   97734   4
11052   3   97734   4
11052   3   97734   4
11052   3   97734   4
11052   3   97734   4
11052   4   97734   4
11052   4   97734   4
11052   4   97734   4
11052   4   97734   4
11052   4   97734   4
11052   4   97734   4
11052   4   97734   4
11052   4   97734   4
11052   4   97734   4
11052   4   97734   4
11052   5   97734   4
11052   5   97734   4
11052   5   97734   4
11052   5   97734   4
11052   5   97734   4
11052   5   97734   4
11052   5   97734   4
11052   5   97734   4
11052   5   97734   4
11052   5   97734   4

抱歉,粘贴太长了,因为您可以看到每个“第二列”值(1、2、3、4、5 为 10 倍)总共 50 行,每一行重复 10 次。

2)

如果这样写:

select 
C.One
,C.Two
,C.Three
,C.Four
,sum(c.Four) as 'Sum'

from mytable C

where C.One = 11052 and C.Three = 97734
group by C.One, C.Two,C.Three , C.Four

导致:

One  | Two | Three  | Four  |  Sum
11052   1       97734   4   40
11052   2       97734   4   40
11052   3       97734   4   40
11052   4       97734   4   40
11052   5       97734   4   40

总和应该是 20 (4+4+4+4+4) 但它是 40,因为在 previuos 查询中重复 4 次是 10 倍。 (上)。

我应该结束

One  | Two | Three  | Four  |  Sum
11052   1       97734   4   20
11052   2       97734   4   20
11052   3       97734   4   20
11052   4       97734   4   20
11052   5       97734   4   20

我应该怎么做才能解决这个问题并获得 20 而不是 40?希望很清楚。感谢您的宝贵时间。

【问题讨论】:

    标签: sql sql-server sum aggregate alias


    【解决方案1】:

    您可以使用子查询来完成此操作:

    select a.One,a.Two,a.Three,a.Four,sum(a.Four) as 'Sum'
    from (select C.One,C.Two,C.Three,C.Four
      from mytable C
      where C.One = 11052 and C.Three = 97734
      group by C.One, C.Two,C.Three , C.Four) a
    

    【讨论】:

      【解决方案2】:

      试试这个:

       select 
            DISTINCT C.Two
            ,C.One
            ,C.Three
            ,C.Four
            ,sum(c.Four) as 'Sum'
      
       from mytable C
       where C.One = 11052 and C.Three = 97734
       group by  C.Two,C.One,C.Three,C.Four
      

      【讨论】:

      • 嗨!,无论有没有不同,输出都是一样的
      【解决方案3】:

      我假设您使用的是 SQL Server 2008 及更高版本,如果不是,请发表评论。
      您正在尝试从 myTable 获取 5 个唯一行;我们称之为tempResult
      然后对于您要附加一列的所有唯一行。
      此列是 FourtempResult 列的总和。
      对于每一行,它将具有相同的值

      select
        One, 
        Two, 
        Three, 
        Four, 
        sum(Four) over (order by One,Two,Three,Four asc) as SumAll
      from
      (
        select distinct
          C.One,
          C.Two,
          C.Three,
          C.Four,
        from mytable C  
        where 
          C.One = 11052 and 
          C.Three = 97734 
      ) g
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-31
        • 2013-07-11
        • 2016-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-12
        相关资源
        最近更新 更多