想把datatable中的一列分组计算count(),用compute可以实现么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了想把datatable中的一列分组计算count(),用compute可以实现么?相关的知识,希望对你有一定的参考价值。

dt.Compute("COUNT(*)", "GROUP BY Id");

出错:
语法错误:“BY”运算符后缺少操作数。

求方法
group by 的那个字段有重复的,我这需要去重。所以想用 GROUP BY 。

参考技术A dt.Compute("COUNT(id)", "true");

true 表示filter

补充:
Compute方法只能产生一个值,用Group by 可能产生多个值,所以逻辑是不对的追问

table.compute("COUNT(字段1)",”group by 字段1“);
这样我想取的只是group by之后的 count(*),则必然是一个数值,又怎会是多个值?

追答

不管说得对不对,这可以验证的,看会不会出现多个值
select count(*) from table
group by id

追问

好吧,哥你对了,惭愧。可我问题还没解决
dataTable是否可以用compute来实现这种类型的统计:

select
count(*)
from(
select * from table1
group by id
) a

追答

dt.Compute("COUNT(id)", "true");

要么
dt.Compute("COUNT(id)", “id = 1”); 相当于
select count(*) from table1
where id = 1 --当然你也可以是name = 'test'之类的,必须确认筛选后只产生一个值。

本回答被提问者采纳

winform中如何对一个 datatable 中的数据 进行 分组统计 需要 count 和group by

winform中如何对一个 datatable 中的数据 进行 分组统计 需要 count 和group by

参考技术A 1 一种方式是借用linq
2 自己写代码处理
a 分组排序

public static void GroupByDT(ref DataTable dt,string strColumName,string strSortColumnName)

if (dt == null && dt.Rows.Count == 0)
else

DataTable dtResult = dt.Clone();
DataTable dtSortResult = dt.Clone();
if(dt.Rows.Count == 1)

dtResult.ImportRow(dt.Rows[0]);

else

dtSortResult = SortDT(dt, strSortColumnName);
for (int i = 0; i < dtSortResult.Rows.Count; i++)

for (int j = dtSortResult.Rows.Count-1; j >= 0; j--)

if(dtSortResult.Rows.Count > 0)

if (dtSortResult.Rows[i][strColumName] == dtSortResult.Rows[j][strColumName])

string strPrjID = dtSortResult.Rows[j][strColumName].ToString();
dtResult.ImportRow(dtSortResult.Rows[j]);
dtSortResult.Rows.Remove(dtSortResult.Rows[j]);
if (i != 0) i--; else
if (j != dtSortResult.Rows.Count) j++;
else if (j == 0) j++;




dt.Clear();
dt.Merge(dtResult);



b count 汇总计算

public static DataTable CalculateSumInfo(DataTable dt)

DataTable dtResult = dt.Copy();
object objsumDebit = dtResult.Compute("sum(Debit)", "TRUE");
object objsumCredit = dtResult.Compute("sum(Credit)", "TRUE");
decimal surplusFund = Math.Round((Convert.ToDecimal(objsumDebit) - Convert.ToDecimal(objsumCredit)), 2);
DataRow row = dtResult.NewRow();
row["SurplusFund"] = surplusFund;
dtResult.Rows.Add(row);
return dtResult;
本回答被提问者和网友采纳
参考技术B linq to datatable

以上是关于想把datatable中的一列分组计算count(),用compute可以实现么?的主要内容,如果未能解决你的问题,请参考以下文章

c#如何查询数据库中表的一列数据并赋值给一个数组

c# 怎么更改DataTable 中某列的值?

在C#中进行DataTable操作:根据列数据插入一些汇总行

如何提取DataTable中的某一列字段的所有数据,进行运算

COUNT() 返回分组表中的总行数

如何仅过滤dataTable angular中的一列[重复]