C# 使用C
如何在SQL中使用C作为unpivot将数据集列转换为行。我找到了一种将行转换为列的方法。有没有将数据表列转换为行的想法??谢谢 我的代码如下所述C# 使用C,c#,asp.net,dataset,unpivot,C#,Asp.net,Dataset,Unpivot,如何在SQL中使用C作为unpivot将数据集列转换为行。我找到了一种将行转换为列的方法。有没有将数据表列转换为行的想法??谢谢 我的代码如下所述 OracleDatabase database = null; DbCommand command = null; protected void Button1_Click(object sender, EventArgs e) { database = new OracleDa
OracleDatabase database = null;
DbCommand command = null;
protected void Button1_Click(object sender, EventArgs e)
{
database = new OracleDatabase("Connection String");
command = database.GetSqlStringCommand("select avg(PRMTN_PRDCT_GROUP_SK),avg(STORE_CLSTR_SK) from ALG_AVERAGE_BASELINE_SALE");
DataSet ds = new DataSet();
ds = database.ExecuteDataSet(command);
DataTable dt = new DataTable();
dt = ds.Tables[0];
dt.Columns.AddRange(new DataColumn[] {
new DataColumn("col1"),
new DataColumn("col2") });
foreach (DataRow row in dt.Rows)
{
foreach (var column in row.ItemArray)
Response.Write(column);
}
Response.Write("\n");
var result = dt.Columns
.Cast<DataColumn>()
.Select(column =>
dt.AsEnumerable()
.Select(row =>
row.ItemArray[column.Ordinal].ToString()));
Response.Write("\n");
foreach (var row in result)
{
foreach (var column in row)
Response.Write(column);
Response.Write("\n");
}
}
它在控制台中运行良好。但是在我的web应用程序中,这些行并没有取消激活。请尝试以下代码创建一个datatable,然后在其中填充数据
public DataTable getdatw()
{
DataTable dtExcel = new DataTable();
dtExcel.Columns.Add("Id", typeof(Int32));
dtExcel.Columns.Add("Name", typeof(String));
DataRow row;
row = dtExcel.NewRow();
row["Id"] = "1";
row["Name"] = "kamal";
dtExcel.Rows.Add(row);
return dtExcel;
}
还有一件事,根据我们的要求,数据可以以多种方式填充,例如,您希望从数组、集合等填充。取消填充数据表的演示
据我所知,您希望将行放入列中。下面的示例适用于3行标题+2个数据行
如果有更多行,则必须更改部分dt2.rows.AddcolumnNames[i],dt.rows[0]。ItemArray[i],dt.rows[1]。ItemArray[i];使其与行数匹配。对于很多行来说,这个解决方案必须改进
void Main() {
var dt = GetDataTable("Sales");
dt.Dump();
UnpivotDataTable(dt).Dump();
}
public DataTable GetDataTable(string name) {
var dt = new DataTable(name);
dt.Columns.Add("Id", typeof(string)); // dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Apartement", typeof(string));
dt.Columns.Add("Monday", typeof(int));
dt.Columns.Add("Tuesday", typeof(int));
dt.Columns.Add("Wednesday", typeof(int));
dt.Columns.Add("Thursday", typeof(int));
dt.Columns.Add("Friday", typeof(int));
dt.Rows.Add(1, "Food", 300, 270, 310, 280, 500);
dt.Rows.Add(2, "Electronics", 600, 470, 410, 380, 1500);
return dt;
}
public DataTable UnpivotDataTable(DataTable dt){
string[] columnNames = dt.Columns.Cast<DataColumn>().Select(x => x.ColumnName).ToArray();
var dt2 = new DataTable("unpivot");
dt2.Columns.Add("Headers", typeof(string));
for(int rowIndex = 0; rowIndex < dt.Rows.Count; rowIndex++){
dt2.Columns.Add("Row" + rowIndex.ToString(), typeof(string));
}
for(int i=0; i < columnNames.Length; i++){
// flaw: hardcoded is the amount of rows that are unpivoted
dt2.Rows.Add(columnNames[i], dt.Rows[0].ItemArray[i],dt.Rows[1].ItemArray[i]);
}
return dt2;
}
surfmuggle的答案就是我所说的对表进行换位,交换列和行。在excel中,当您透视数据时,您可以通过另一列Apartment/department的属性聚合示例中一列的值sum/min/avg/etc、费用或销售额。你还可以在一周中的另一个栏目中进一步细分开支 所以,当我想取消pivot数据时,我想回到重复的原始数据,这样我就可以用其他方式重新透视它,通常是先对它进行过滤,这样我的新透视表中就不会有那么多列了 这就是我想让麻瓜的数据变成: 这是我的C代码,用于将其原始数据表解压为我所需的数据格式:
public static DataTable UnpivotDataTable(DataTable pivoted)
{
string[] columnNames = pivoted.Columns.Cast<DataColumn>()
.Select(x => x.ColumnName)
.ToArray();
var unpivoted = new DataTable("unpivot");
unpivoted.Columns.Add(pivoted.Columns[0].ColumnName, pivoted.Columns[0].DataType);
unpivoted.Columns.Add("Attribute", typeof(string));
unpivoted.Columns.Add("Value", typeof(string));
for (int r = 0; r < pivoted.Rows.Count; r++)
{
for (int c = 1; c < columnNames.Length; c++)
{
var value = pivoted.Rows[r][c]?.ToString();
if (!string.IsNullOrWhiteSpace(value))
{
unpivoted.Rows.Add(pivoted.Rows[r][0], columnNames[c], value);
}
}
}
return unpivoted;
}
数据集没有列,数据表有列。所以您想要一个表,其中包含一个columntype字符串,name=ColumnName?是的。从Datatable到unpivot一列到rowTry