对没有字段分组的行求和

时间:2019-05-16 10:48:09

标签: sql sql-server

我正在使用SQL Server 2012,并且试图对表的行求和。问题是我没有要分组的列。这可能吗...?您将如何提出查询?

原始表:

+----+------+--------+
| ID | User | Salary |
+----+------+--------+
| 1  | John | 150    |
| 2  | Marie| 120    |
| 3  | Willy| 125    |
| 4  | Juan | 110    |
| 5  |Carlos| 145    |
| 6  | Mike | 115    |
| 7  | Elsie| 100    |
| 8  | Elvie| 500    |
+----+------+--------+

预期结果:

+----+--------+--------+
| ID |  USER  | SALARY |
+----+--------+--------+
|  1 | 1plus2 |    270 |
|  2 | 1plus3 |    275 |
|  3 | 1to4   |    205 |
|  4 | 1plus8 |    650 |
+----+--------+--------+

2 个答案:

答案 0 :(得分:3)

您可以使用表构造函数定义组。例如,对于前两个:

select v.new_user, sum(salary)
from t join
     (values ('1plus2', 1), ('1plus2', 2),
             ('1plus3', 1), ('1plus3', 3)
     ) v(new_user, user)
     on t.user = v.user
group by v.new_user;

只需扩展values()子句即可添加更多感兴趣的组。

答案 1 :(得分:0)

如果想要所有可能的排列,则可以使用自连接,这只会为两个不同的用户提供所有排列。对于第三个用户,您需要anotehr自加入,依此类推。

select CONCAT(t1.User,"plus", t2.User),  (t1.Salary + t2.Salary) 
FROM mytable as t1 join mytable as t2 
ON t1.ID <> t2.ID;