C# DataTable-(乱七八糟-01)-查询日期区间内,统计不存在的维度值,显示且设置值为0

本文介绍了一种将原始DataTable通过行转列的方式进行数据重塑的方法,并详细解释了如何处理不同维度的数据匹配及缺失值填充,确保数据完整性和一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        //原始DataTable值
        DataTable dt=.。。。。。。。。。。。。。
        //维度类型
        //逗比做法-把查询条件作为sql查询语句,包装到DataTable中
        string companysql = "select " + com.GetQy(comp);
        DataTable dtcomp = helper.GetDataTable(companysql); 
        //DataTable-行转列
        DataTable dtt = new DataTable();
        dtt.Columns.Add("category", typeof(string));
        DataRow drt=dtt.NewRow();  
        for (int i = 0; i < dtcomp.Columns.Count; i++) 
        {
            drt = dtt.NewRow();
            drt["category"] = dtcomp.Rows[0][i];
            dtt.Rows.Add(drt);
        }
        //日期
        //逗比做法-把查询条件作为sql查询语句,包装到DataTable中
        //当前做法-从其他DataTable表中取出不重复的日期值-DataView-实现
        DataTable dtyear = null;
        if (dt != null && dt.Rows.Count > 0)
        {
            DataView dv = new DataView(dt);
            dtyear = dv.ToTable(true, "yearmonth");
        }

        //重新定义DataTable-封装转换后的的DataTable值
        DataTable newdt = new DataTable();
        newdt.Columns.Add("category", typeof(string));
        newdt.Columns.Add("yearmonth", typeof(string));
        newdt.Columns.Add("value", typeof(double));
        DataRow drr = newdt.NewRow();

        //匹配0值
        if (dtyear.Rows.Count > 0)
        {
           //日期
            for (int i = 0; i < dtyear.Rows.Count; i++)
            {
                //获取具体日期值  
                string yearSD = dtyear.Rows[i]["yearmonth"].ToString();

                //维度
                for (int j = 0; j < dtt.Rows.Count; j++)
                { 
                    drr = newdt.NewRow();
                    //根据日期和维度-获取对应值
                    DataRow[] drcomp = dt.Select(" category='" + dtt.Rows[j]["category"].ToString() + "' and yearmonth='" + yearSD+"' "); 
                    double yearTD = 0;//维度值 
                    //存在-对应值(唯一)
                    if (drcomp.Length > 0)
                    { 
                        drr["yearmonth"] = drcomp[0]["yearmonth"].ToString();//drcomp[0]["category"];
                        drr["category"] =drcomp[0]["category"] ;
                        drr["value"] = drcomp[0]["value"].ToString();
                        newdt.Rows.Add(drr);
                    }
                    else//不存在-值设为0
                    {
                        drr["yearmonth"] = yearSD;
                        drr["category"] = dtt.Rows[j]["category"].ToString();
                        drr["value"] = yearTD;
                        newdt.Rows.Add(drr);
                    }
                } 
            }
            dt = newdt;
        } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值