C#行转列

        /// <summary>
        /// 年份 行转列
        /// </summary>
        /// <param name="_outDataSource"></param>
        /// <returns></returns>
        private DataTable RCC(DataTable _outDataSource)
        {
            //从DataTable中读取不重复的日期行,用来构造新DataTable的列
            DataTable distinct_date = _outDataSource.DefaultView.ToTable(true, "年份");

            DataTable new_DataTable = new DataTable();

            //将行业列添加到新表中
            DataColumn new_d_col = new DataColumn();
            new_d_col.ColumnName = "行业";
            new_d_col.Caption = "";
            new_DataTable.Columns.Add(new_d_col);

            StringBuilder str_sum = new StringBuilder();

            //开始在新表中构造日期列
            foreach (DataRow dr in distinct_date.Rows)
            {
                new_d_col = new DataColumn();
                new_d_col.DataType = typeof(decimal);
                new_d_col.ColumnName = dr["年份"].ToString();
                new_d_col.Caption = dr["年份"].ToString();
                new_d_col.DefaultValue = 0;
                new_DataTable.Columns.Add(new_d_col);

                //这个的目的是为合计列构造expression   注释 为 可算合计
                // str_sum.Append("+[").Append(dr["年份"].ToString()).Append("]");

            }

            ////将合计列添加到新表中   注释 为 可算合计
            //new_d_col = new DataColumn();
            //new_d_col.DataType = typeof(decimal);
            //new_d_col.ColumnName = "Sum";
            //new_d_col.Caption = "合计";
            //new_d_col.DefaultValue = 0;
            //new_d_col.Expression = str_sum.ToString().Substring(1);
            //new_DataTable.Columns.Add(new_d_col);

            /*到此新表已经构建完毕,下面开始为新表添加数据*/

            //从原DataTable中读出不重复的行业,以行业为关键字来构造新表的行
            DataTable distinct_object = _outDataSource.DefaultView.ToTable(true, "行业");
            DataRow[] drs;
            DataRow new_dr;
            foreach (DataRow dr in distinct_object.Rows)
            {
                new_dr = new_DataTable.NewRow();
                new_dr["行业"] = dr["行业"].ToString();

                foreach (DataRow _dr in distinct_date.Rows)
                {
                    drs = _outDataSource.Select("行业=‘" + dr["行业"].ToString() + "‘ and 年份=‘" + _dr["年份"].ToString() + "‘");
                    if (drs.Length != 0)
                    {
                        new_dr[_dr["年份"].ToString()] = Math.Round(Convert.ToDecimal(drs[0]["条数"]), 2);
                    }
                }
                new_DataTable.Rows.Add(new_dr);
            }

            return new_DataTable;
        }

调用方法:

  DataTable newTable = new DataTable();
            newTable.Columns.Add("行业", typeof(string));     //行业名称
            newTable.Columns.Add("年份", typeof(string));             //年份
            newTable.Columns.Add("条数", typeof(string));    //条数

            int years = Convert.ToInt32(DateTime.Now.ToString("yyyy"));

            if (!string.IsNullOrEmpty(currentyear))
            {
                years = Convert.ToInt32(currentyear);
            }
            for (var i = years; i >= years - 9; i--)
            {
                DataTable dt = GetGroupIndustryByYear(i.ToString());

                if (dt != null && dt.Rows.Count > 0)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        DataRow n_dr = newTable.NewRow();
                        n_dr["行业"] = Convert.ToString(dr["INDUSTRYCATEGORYNAME"]);
                        n_dr["年份"] = Convert.ToString(i);
                        n_dr["条数"] = Convert.ToString(dr["count"]);

                        newTable.Rows.Add(n_dr);
                    }
                }

            }

            DataTable newDT = RCC(newTable);
时间: 2024-10-23 15:46:42

C#行转列的相关文章

MySQL,排序,统计行转列

表 -- ------------------------------ Table structure for a-- ---------------------------- DROP TABLE IF EXISTS `a`; CREATE TABLE `a` ( `type` varchar(255) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, `val` varchar(255) DEFAULT NULL ) ENGINE=InnoDB

GreenPlum之数组合并取交集及行变列、列变行函数

--1.利用INTERSECT关键字数组之间交集函数 CREATE OR REPLACE FUNCTION array_intersect(anyarray, anyarray) RETURNS anyarray AS $$ SELECT ARRAY( SELECT UNNEST($1) INTERSECT SELECT UNNEST($2)); $$ LANGUAGE SQL; select array_intersect(array[1,2,3],array[2,3,4]); --2.行变列

行转列、列转行

一:行转列 模式:N行转一列  本实验N取31.建表SQL> create table grade(id int,name varchar2(10),subject varchar2(10),grade number(3));2.插入实验数据insert into grade values(1,'Andy','Yuwen',11);insert into grade values(2,'Andy','Math',22);insert into grade values(3,'Andy','Eng

table行转列

table行转列 摘要 在使用ews调用exhange的收件箱的并在h5页面显示邮件详情的时候,因为返回的每封邮件的内容都是htmlbody,没有textbody.每封邮件又没什么规律,用正则表达式来匹配内容并不合适,另外又要保持原邮件的格式.这个确实很难统一.目前是使用iframe标签,将原邮件的html在iframe中展示.但问题又来了,如果邮寄中有大表格,大图片,如何保持邮件内容自适应? 思考 通常的做法是在head中添加meta标签 <meta name="viewport&quo

Oracle行转列、列转行的Sql语句总结(转)

多行转字符串 这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_userselect id||username str from app_user 字符串转多列 实际上就是拆分字符串的问题,可以使用 substr.instr.regexp_substr函数方式 字符串转多行 使用union all函数等方式 wm_concat函数 首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以",&quo

SQL Server 行转列

语法: PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法: table_source PIVOT( 聚合函数(value_column) FOR pivot_column IN(<column_list>) ) UNPIVOT用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现 完整语法: table

SQLServer处理行转列和列转行

掌握SQL Server 行转列和列转行 1.列转行 数据经过计算加工后会直接生成前端图表需要的数据源,但是程序里又需要把该数据经过列转行写入中间表中,下次再查询该数据时直接从中间表查询数据. 1.1 列换行语法 table_source UNPIVOT( value_column FOR pivot_column IN(<column_list>) ) 1.2  行转列案例 WITH T AS ( SELECT 1 as TeamId,'测试团队1' as Team,80 'MEN',20

做图表统计你需要掌握SQL Server 行转列和列转行

说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需要用到行转列和列转行. 1.列转行 数据经过计算加工后会直接生成前端图表需要的数据源,但是程序里又需要把该数据经过列转行写入中间表中,下次再查询该数据时直接从中间表查询数据. 1.1 列换行语法 table_source UNPIVOT( value_column FOR pivot_column IN(<column_list>) ) 1.2  行转列案例

mysql行转列利用case when

CREATE TABLE bill ( id CHAR(36) NOT NULL, customer INT(255) NULL DEFAULT NULL COMMENT '顾客', shop INT(255) NULL DEFAULT NULL COMMENT '消费店铺', money DECIMAL(10,2) NULL DEFAULT NULL COMMENT '花费', type INT(255) NULL DEFAULT NULL COMMENT '类型 0', PRIMARY KE

行转列(FOR XML PATH)

SELECT (SELECT ac.ColName+',' FROM T1 AS ac FOR XML PATH('')) AS ColName, (SELECT ac.colTitle+',' FROM T1 AS ac FOR XML PATH('')) AS colTitle 行转列(FOR XML PATH),布布扣,bubuko.com