数据表中的分组依据列总和

发布于 2024-12-09 06:38:22 字数 448 浏览 0 评论 0原文

在以下用于在DataTable dt中查找Rate列的总和n的代码中,

dt.Compute("Sum(Convert(Rate, 'System.Int32'))");

可以像SQL一样分配group by子句In order根据同一 dt 的另一列中的值获取 Sum 例如:

----------------------------
Rate | Group
----------------------------
100  | A
120  | B
70   | A
----------------------------

我只想得到 Sum A=170Sum B=120

In the following code for finding sum of Rate column in the DataTable dt

dt.Compute("Sum(Convert(Rate, 'System.Int32'))");

In this is it possible to assign group by clause like SQL Inn order to get Sum based on a value in another column of the same dt
Fo eg:

----------------------------
Rate | Group
----------------------------
100  | A
120  | B
70   | A
----------------------------

I just wanna to get Sum A=170 an Sum B=120.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

独孤求败 2024-12-16 06:38:22

尝试一下LINQ,

var result = from tab in dt.AsEnumerable()
              group tab by tab["Group"]
                into groupDt
                 select new 
                  { 
                    Group = groupDt.Key,  
                    Sum=groupDt.Sum((r)=> decimal.Parse(r["Rate"].ToString()))
                  };

Try LINQ,

var result = from tab in dt.AsEnumerable()
              group tab by tab["Group"]
                into groupDt
                 select new 
                  { 
                    Group = groupDt.Key,  
                    Sum=groupDt.Sum((r)=> decimal.Parse(r["Rate"].ToString()))
                  };
耶耶耶 2024-12-16 06:38:22

您可能希望首先从数据表中获取不同组值的列表。然后循环遍历组列表并为每个组调用函数:

dt.Compute("Sum(Convert(Rate, 'System.Int32'))", "Group = '" + Group + "'");

You might want to get the list of distinct Group values from the DataTable first. Then loop through the list of Groups and call the function for each Group:

dt.Compute("Sum(Convert(Rate, 'System.Int32'))", "Group = '" + Group + "'");
夢归不見 2024-12-16 06:38:22

使用 LINQ 是个好主意。如果您使用 .net 2.0,则可以按如下方式实现:

    Dictionary<string, int> dicSum = new Dictionary<string, int>();
    foreach (DataRow row in dt.Rows)
    {
        string group=row["Group"].ToString();
        int rate=Convert.ToInt32(row["Rate"]);
        if (dicSum.ContainsKey(group))
            dicSum[group] += rate;
        else
            dicSum.Add(group, rate);
    }
    foreach (string g in dicSum.Keys)
        Console.WriteLine("SUM({0})={1}", g, dicSum[g]);

using LINQ is a good idea. if you are working with .net 2.0, you can implement this as follows:

    Dictionary<string, int> dicSum = new Dictionary<string, int>();
    foreach (DataRow row in dt.Rows)
    {
        string group=row["Group"].ToString();
        int rate=Convert.ToInt32(row["Rate"]);
        if (dicSum.ContainsKey(group))
            dicSum[group] += rate;
        else
            dicSum.Add(group, rate);
    }
    foreach (string g in dicSum.Keys)
        Console.WriteLine("SUM({0})={1}", g, dicSum[g]);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文