聚合具有相同值的两列或多列的行
Agregate rows with two or more columns with same value
在 asp.net c# 中,我有一大组值。我正在尝试聚合具有相同值的行并对它们的一些值求和(objective 是在 table 中有一行与聚合信息)......有没有聚合行的方法有两个或多个具有相同值的列并对第三列求和?
Table 示例:
id | column1 | column2 |column to sum
--------+---------+----------+-------------
1 | 3 | 1 |10
2 | 3 | 1 |10
3 | 3 | 2 |10
4 | 4 | 2 |10
5 | 4 | 2 |10
6 | 7 | 3 |10
7 | 7 | 3 |10
8 | 7 | 3 |10
9 | 5 | 1 |10
10 | 5 | 4 |10
Objective:具有相同 column1 和 column2 值的 "column to sum" 行的总和值
它会这样结束:
id | column1 | column2 |column to sum
--------+---------+----------+-------------
- | 3 | 1 |20
3 | 3 | 2 |10
- | 4 | 2 |20
- | 7 | 3 |30
9 | 5 | 1 |10
10 | 5 | 4 |10
有没有办法用 EF 或 LINQ 或 SQL STATEMENTS 来做到这一点?
谢谢
简单 GROUP BY
应该可以完成您的工作。如果你 select id
你会变得多余 columnToSum
。
WITH CTE AS (
SELECT 1 as id, 3 as column1, 1 as column2,10 as [column to sum]
UNION
SELECT 2 as id, 3 as column1, 1 as column2,10 as [column to sum]
UNION
SELECT 3 as id, 3 as column1, 2 as column2,10 as [column to sum]
UNION
SELECT 4 as id, 4 as column1, 2 as column2,10 as [column to sum]
UNION
SELECT 5 as id, 4 as column1, 2 as column2,10 as [column to sum]
UNION
SELECT 6 as id, 7 as column1, 3 as column2,10 as [column to sum]
UNION
SELECT 7 as id, 7 as column1, 3 as column2,10 as [column to sum]
UNION
SELECT 8 as id, 7 as column1, 3 as column2,10 as [column to sum]
UNION
SELECT 9 as id, 5 as column1, 1 as column2,10 as [column to sum]
UNION
SELECT 10 as id, 5 as column1, 4 as column2,10 as [column to sum]
)
SELECT column1,column2,SUM([column to sum]) [column to sum] FROM CTE
GROUP BY column1,column2
在SQL,
SELECT column2, colum1, SUM(column to sum) GROUP BY column2, colum1
在 LINQ 查询语法中(未经测试,但应该如下所示)
var result = from res in myTableOrClassList
group res by new { res.Column1, res.Column2 } into g
select new { column1 = g.Key.column1, colum2 = g.Key.column2, columnSum = g.Sum(f => f.columToSum) };
Linq 方法语法
var linq = myTableOrClassList.GroupBy(p=> new { p.Column1, p.Column2 }).
Select(k=> new {column1 = k.Key.Column1, column2 = k.Key.Column2, sumColumn = k.Sum(each => each.columToSum) });
在 asp.net c# 中,我有一大组值。我正在尝试聚合具有相同值的行并对它们的一些值求和(objective 是在 table 中有一行与聚合信息)......有没有聚合行的方法有两个或多个具有相同值的列并对第三列求和?
Table 示例:
id | column1 | column2 |column to sum
--------+---------+----------+-------------
1 | 3 | 1 |10
2 | 3 | 1 |10
3 | 3 | 2 |10
4 | 4 | 2 |10
5 | 4 | 2 |10
6 | 7 | 3 |10
7 | 7 | 3 |10
8 | 7 | 3 |10
9 | 5 | 1 |10
10 | 5 | 4 |10
Objective:具有相同 column1 和 column2 值的 "column to sum" 行的总和值
它会这样结束:
id | column1 | column2 |column to sum
--------+---------+----------+-------------
- | 3 | 1 |20
3 | 3 | 2 |10
- | 4 | 2 |20
- | 7 | 3 |30
9 | 5 | 1 |10
10 | 5 | 4 |10
有没有办法用 EF 或 LINQ 或 SQL STATEMENTS 来做到这一点?
谢谢
简单 GROUP BY
应该可以完成您的工作。如果你 select id
你会变得多余 columnToSum
。
WITH CTE AS (
SELECT 1 as id, 3 as column1, 1 as column2,10 as [column to sum]
UNION
SELECT 2 as id, 3 as column1, 1 as column2,10 as [column to sum]
UNION
SELECT 3 as id, 3 as column1, 2 as column2,10 as [column to sum]
UNION
SELECT 4 as id, 4 as column1, 2 as column2,10 as [column to sum]
UNION
SELECT 5 as id, 4 as column1, 2 as column2,10 as [column to sum]
UNION
SELECT 6 as id, 7 as column1, 3 as column2,10 as [column to sum]
UNION
SELECT 7 as id, 7 as column1, 3 as column2,10 as [column to sum]
UNION
SELECT 8 as id, 7 as column1, 3 as column2,10 as [column to sum]
UNION
SELECT 9 as id, 5 as column1, 1 as column2,10 as [column to sum]
UNION
SELECT 10 as id, 5 as column1, 4 as column2,10 as [column to sum]
)
SELECT column1,column2,SUM([column to sum]) [column to sum] FROM CTE
GROUP BY column1,column2
在SQL,
SELECT column2, colum1, SUM(column to sum) GROUP BY column2, colum1
在 LINQ 查询语法中(未经测试,但应该如下所示)
var result = from res in myTableOrClassList
group res by new { res.Column1, res.Column2 } into g
select new { column1 = g.Key.column1, colum2 = g.Key.column2, columnSum = g.Sum(f => f.columToSum) };
Linq 方法语法
var linq = myTableOrClassList.GroupBy(p=> new { p.Column1, p.Column2 }).
Select(k=> new {column1 = k.Key.Column1, column2 = k.Key.Column2, sumColumn = k.Sum(each => each.columToSum) });