Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C_C#_Asp.net_Dataset_Unpivot - Fatal编程技术网

C# 使用C

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

如何在SQL中使用C作为unpivot将数据集列转换为行。我找到了一种将行转换为列的方法。有没有将数据表列转换为行的想法??谢谢

我的代码如下所述

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