You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按指定参数排序DataTable统计行并获取Column1各distinct值对应行数

解决方案

存储过程侧统计逻辑

你可以在执行聚合插入操作之前,先对传入的表值参数做分组统计,暂存每个Column1对应的原始行数,不会影响后续的聚合逻辑:

SET NOCOUNT ON
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[myProcedure]
    @param myUserDefinedTableType readonly
AS
BEGIN TRANSACTION
    -- 提前统计每个Column1对应的全量行数
    DECLARE @Column1Stats TABLE (
        Column1 [这里替换为你Column1的实际数据类型],
        RowCount INT
    )
    INSERT INTO @Column1Stats (Column1, RowCount)
    SELECT Column1, COUNT(*)
    FROM @param
    GROUP BY Column1

    -- 原有聚合插入逻辑保持不变
    INSERT INTO [dbo].[myTable] (/* 列名列表 */)
        SELECT [Column1],
               -- 其他列
        FROM @param
        GROUP BY [Column2], [Column1]
        ORDER BY [Column2], [Column1]

    -- 原有UPDATE语句保持不变

    -- 如需返回统计结果给应用层,直接加下面的查询即可
    SELECT * FROM @Column1Stats ORDER BY Column1

COMMIT TRANSACTION

C#侧数据传递逻辑

你原有使用静态属性存行数的方式存在并发风险,多用户请求会出现数值覆盖问题,建议自定义数据结构关联Column1值、对应行数、关联原行三者的关系,直接在应用层统计也可以,不需要修改存储过程:

  1. 定义统计结果实体
public class Column1Statistic
{
    // Column1的具体取值
    public object Column1Value { get; set; }
    // 该取值对应的行数
    public int RowCount { get; set; }
    // 关联的原始行数据,不需要追溯原行可以删除该字段
    public List<DataRow> RelatedRows { get; set; }
}
  1. 从DataTable生成统计结果
// 可在View层或数据访问层执行该逻辑
public List<Column1Statistic> CalculateColumn1Stats(DataTable originalDt)
{
    return originalDt.AsEnumerable()
        .GroupBy(row => row["Column1"])
        .OrderBy(group => group.Key) // 按Column1排序
        .Select(group => new Column1Statistic
        {
            Column1Value = group.Key,
            RowCount = group.Count(),
            RelatedRows = group.ToList()
        })
        .ToList();
}
  1. 将生成的List<Column1Statistic>直接传给ViewModel即可,既可以拿到每个distinct值对应的行数,也可以按需追溯对应的原始行,不需要硬编码任何动态值。

内容的提问来源于stack exchange,提问作者user16600932

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:09:03