некоторые выбранные поля в качестве столбца Pivote ASP.NET - PullRequest
1 голос
/ 01 октября 2019

Я хочу показать некоторые выбранные столбцы в качестве моего столбца SQL, а остальная часть столбца должна быть сводной. Мой вывод должен быть: Пожалуйста, помогите мне любую идею?

Сводная таблица

ID | Employee_ID | 01-sep-2019 | 02-sep-2019 | 03-sep-2019
───┼─────────────┼─────────────┼─────────────┼────────────
1  | 1001        | P           | A           | P             
2  | 1002        | A           | P           | A           
3  | 1003        | A           | P           | P              

Исходная таблица

ID | Employee_ID |STATUS | Created_Date
───┼─────────────┼───────┼─────────────
1  | 1001        | P     | 01-sep-2019
2  | 1002        | A     | 02-sep-2019
3  | 1003        | P     | 03-sep-2019

Я использую 2 `GridView для отображения данных, но это применимо для всех столбцов, которые мне не нужны. Не могли бы вы мне помочь?

private DataTable PivotTable(DataTable origTable) {
    DataTable newTable = new DataTable();
    DataRow dr = null;

    //Add Columns to new Table
    for (int i = 0; i <= origTable.Rows.Count; i++) {
        newTable.Columns.Add(new DataColumn(origTable.Columns[i].ColumnName, typeof(String)));
    }

    //Execute the Pivot Method
    for (int cols = 0; cols < origTable.Columns.Count; cols++) {
        dr = newTable.NewRow();
        for (int rows = 0; rows < origTable.Rows.Count; rows++) {
            if (rows < origTable.Columns.Count) {
                dr[0] = origTable.Columns[cols].ColumnName; // Add the Column Name in the first Column
                dr[rows + 1] = origTable.Rows[rows][cols];
            }
        }

        newTable.Rows.Add(dr); //add the DataRow to the new Table rows collection
    }

    return newTable;
}

private void BindGridView() {
    string strConnString = ConfigurationManager.ConnectionStrings["SQLDBConnection"].ConnectionString;
    SqlConnection con = new SqlConnection(strConnString);
    try {
        con.Open();
        string sqlStatement = "SELECT Top(5)* FROM tbl_QC_Attandence";
        SqlCommand sqlCmd = new SqlCommand(sqlStatement, con);
        SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
        DataTable dt = new  DataTable();
        sqlDa.Fill(dt);
        if (dt.Rows.Count > 0) {
            //Bind the First GridView with the original data from the DataTable
            grdorignal.DataSource = dt;
            grdorignal.DataBind();

            //Pivot the Original data from the DataTable by calling the
            //method PivotTable and pass the dt as the parameter
            DataTable pivotedTable = PivotTable(dt);
            grdpivote.DataSource = pivotedTable;
            grdpivote.DataBind();
        }
    } catch (System.Data.SqlClient.SqlException ex) {
        string msg = "Fetch Error:";
        msg += ex.Message;
        throw new Exception(msg);
    } finally {
        con.Close();
    }
}

ОРИГИНАЛЬНЫЙ СТОЛ

ID Employee_ID STATUS Created_Date

1 1001 P 01-sep-2019 2 1002 A02-сен-2019 3 1003 P 03-сен-2019

PIVOT TABLE

ID Employee_ID 01-sep-2019 02-sep-2019 03-сент-2019

1 1001 PAP
2 1002 APA
3 1003 APP MY OUTPUT VIEW

1 Ответ

0 голосов
/ 07 октября 2019

Я создал динамический запрос, который может вам помочь, но ноль можно заменить на «А» на стороне кода, попробуйте ниже одного

DECLARE 
@columns NVARCHAR(MAX) = '',
@sql     NVARCHAR(MAX) = '',
@SelectColumnNames AS NVARCHAR(MAX);

SELECT @columns += QUOTENAME([Created_Date]) + ',' FROM Employee ORDER BY [Created_Date];

SET @columns = LEFT(@columns, LEN(@columns) - 1);

Select @SelectColumnNames = ISNULL(@SelectColumnNames + ',','') + 'ISNULL(' + QUOTENAME([STATUS]) + ', 0) AS ' + QUOTENAME([STATUS]) from (SELECT distinct [STATUS] from Employee) as Employees print @SelectColumnNames

SET @sql = N'Select * from( select Created_Date,[STATUS],ID,Employee_ID from Employee )t PIVOT( MAX([STATUS]) FOR [Created_Date] IN ('+ @columns +') ) AS pivot_table ';

EXECUTE sp_executesql @sql;

enter image description here

...