SQL Server 计算字段的SUM()

qxgroojn  于 2023-01-20  发布在  其他
关注(0)|答案(3)|浏览(119)

我有这样的疑问:
(一)

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

很抱歉粘贴了很长时间,您可以看到,对于每个"列2"值,每行都重复了10次(对于1、2、3、4、5为10次),总共50行。
(二)
如果我这样写:

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

Sum应该是20(4 + 4 + 4 + 4 + 4),但它显示40是上一个查询中重复的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?谢谢你的时间。

6ju8rftf

6ju8rftf1#

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

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
qyyhg6bp

qyyhg6bp2#

试试这个:

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
mctunoxg

mctunoxg3#

我假设您使用的是SQL Server 2008及以上版本,如果没有请评论。
您试图从myTable中获取5个唯一行;我们称之为tempResult
然后为所有要追加列的唯一行追加列。
此列是tempResultFour列的总和。
对于每一行,它将具有相同的值

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

相关问题