weixin_42221975 2024-03-28 20:50 采纳率: 0%
浏览 35

C#Datatable分类汇总

img


如图,图中数据已存入Datatable,改表的cloum很多有64列,现在想根据cloumName6对其他多列进行分类合计并存入新的DataTable中。新表也要是64列。

  • 写回答

4条回答 默认 最新

  • 专家-皆知 2024-03-28 20:51
    关注

    引自免费微信小程序:皆我百晓生

    要解决这个问题,首先需要对原始表格中的cloumName6列进行分类汇总,并将结果插入到一个新的DataTable对象中。以下是一个可能的解决方案:

    using System;
    using System.Data;
    using System.Data.SqlClient;
    
    class Program
    {
        static void Main(string[] args)
        {
            // 创建一个新的DataTable对象
            DataTable newDataTable = new DataTable("CloumCategoryCount");
    
            // 加载原始的Excel表格数据
            using (SqlConnection connection = new SqlConnection("Data Source=(local);Initial Catalog=myDatabase;Integrated Security=True"))
            {
                string query = "SELECT COUNT(*) as CategoryCount FROM CloumTable WHERE cloumName6 = @cloumName6";
                SqlCommand command = new SqlCommand(query, connection);
                command.Parameters.AddWithValue("@cloumName6", "64");
                connection.Open();
                SqlDataReader reader = command.ExecuteReader();
    
                while (reader.Read())
                {
                    int categoryCount = reader.GetInt32(0);
    
                    // 将categoryCount添加到新的DataTable中
                    newDataTable.Rows.Add(categoryCount);
    
                    // 如果某个列有重复的值,考虑删除它
                    if (newDataTable.Columns.Contains(reader.GetName(reader.GetOrdinal("Column1"))))
                    {
                        newDataTable.Columns.Remove(reader.GetOrdinal("Column1"));
                    }
                    if (newDataTable.Columns.Contains(reader.GetName(reader.GetOrdinal("Column2"))))
                    {
                        newDataTable.Columns.Remove(reader.GetOrdinal("Column2"));
                    }
                    // ...
                }
    
                reader.Close();
                connection.Close();
            }
    
            // 显示新DataTable的前几行数据
            Console.WriteLine(newDataTable标题);
            foreach (DataRow row in newDataTable.Rows)
            {
                Console.Write("{0}: {1}", row["CloumCategoryCount"], row["CloumName"]);
            }
    
            Console.ReadLine();
        }
    }
    

    在这个解决方案中,我们首先创建了一个名为newDataTable的新DataTable对象。然后,我们通过SQL查询获取CloumTable表中所有列中cloumName664的所有列的COUNT(*)计数值,这个计数值将被转换为整数并作为新的列名保存在newDataTable中。

    接着,我们将newDataTable的列名从列序号(Column1, Column2, ...)改为每个列的实际名称(例如,"CategoryCount", "CloumName"),以便于进一步的数据清洗和筛选。

    接下来,对于包含重复值的列,我们检查newDataTable是否已经包含该列,并决定是否删除它。这里假设有两个列:Column1Column2,在原始数据集中它们都出现了6次。因为它们在新表中的数据量不同,因此我们考虑删除Column2,使得newDataTable的总数据数量更符合要求。

    最后,我们在控制台输出新DataTable的标题,并遍历每个行,并打印出对应的列名和数据总数。注意,这里的示例使用了简单的移除重复列的方法,实际应用中可能需要更复杂的数据清洗和合并逻辑。

    这段代码假设原始Excel表格数据已经在数据库中存在,且表名为CloumTable,并且列名为cloumName6, Column1, Column2, ..., Column64。在实际操作中,你需要根据你的具体需求调整查询语句、参数设置以及错误处理代码,例如使用不同的连接字符串、正确的列名顺序、处理空格和其他特定的列值情况。同时,确保将上述代码与适当的Visual Studio代码编辑器进行集成,以便在调试过程中实时看到更改后的数据结构和结果。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 3月28日
  • 创建了问题 3月28日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见