表结构如下:
---------------------------------------
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)
--------------------------------------
请教大虾们,这个语句该怎么写!!在此感激不尽!!
/// <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; } }
直接通过sqlserver解决,不是用C#代码实现
感谢您的解决方法,但是我想直接通过sqlserver解决,不是用C#代码实现。