首页 新闻 会员 周边 捐助

动态行转列问题(列动态,行也是动态的)

0
[待解决问题]

表结构如下:
---------------------------------------
HT_DATE  HT_GROSS  HT_COUNT  HT_NAME
 2010          20.00           30            aa
 2011          21.00           31            bb
 2012          23.00           33            cc
 2013          25.00           35           dd
----------------------------------------
现在想要这样的效果:
---------------------------------------
  2010     2011      2012     2013 ……     (HT_DATE)  
  20.00    21.00     23.00    25.00       (HT_GROSS)   
  30        31        33       35         (HT_COUNT)  
  aa        bb        cc       dd         (HT_NAME)
 --------------------------------------
请教大虾们,这个语句该怎么写!!在此感激不尽!!

一缕秋丝的主页 一缕秋丝 | 初学一级 | 园豆:3
提问于:2014-03-09 13:37
< >
分享
所有回答(1)
0
        /// <summary>
        /// 行转列
        /// </summary>
        /// <param name="src_dt">需要转换的table</param>
        /// <param name="columnIndex">table中用来当作新列名的列的索引值(要求table此列的值不能重复)</param>
        /// <returns>table</returns>
        public static DataTable RowToColumn(DataTable src_dt, int columnIndex) //columnIndex 用来当作新列名的列
        {
            try
            {
                DataTable dt = new DataTable();
                dt.Columns.Add(src_dt.Columns[columnIndex].ColumnName);

                foreach (DataRow dr in src_dt.Rows)
                    dt.Columns.Add(dr[columnIndex].ToString());

                int n = src_dt.Columns.Count;
                for (int i = 0; i < n; i++)
                {
                    if (i == columnIndex) continue; //如果是被当作列名的列,则跳过

                    DataRow new_dr = dt.NewRow();
                    string columnName = src_dt.Columns[i].ColumnName;
                    new_dr[0] = columnName;

                    foreach (DataRow dr in src_dt.Rows)
                    {
                        string newColumnName = dr[columnIndex].ToString();
                        new_dr[newColumnName] = dr[columnName];
                    }

                    dt.Rows.Add(new_dr);
                }
                return dt;
            }
            catch (Exception e)
            {
                LogHelper.m_CreateErrorLogTxt(e.TargetSite.ToString(), e.Source, e.Message);
                return null;
            }
        }
✎﹏ℳ๓₯㎕ღ | 园豆:1499 (小虾三级) | 2014-03-10 11:31

直接通过sqlserver解决,不是用C#代码实现

支持(0) 反对(0) 一缕秋丝 | 园豆:3 (初学一级) | 2014-03-10 19:51

感谢您的解决方法,但是我想直接通过sqlserver解决,不是用C#代码实现。

支持(0) 反对(0) 一缕秋丝 | 园豆:3 (初学一级) | 2014-03-10 19:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册