使用sql查询

时间:2015-05-22 11:14:50

标签: c# sql arrays pivot-table

无论如何用sql查询填充多维数组?我的SQL查询结果在数据透视表上。正如你所看到的,我想要做一些总和(总列和总行)并且我想知道在该表中得到总和和百分比的最佳方法。我说多维数组因为它可能更容易。下面的代码有效,但我想知道如何选择行和列来进行总和。我正在使用ASP.NET C#

  protected void Button1_Click(object sender, EventArgs e)
    {

        SqlConnection conn = new SqlConnection("Data Source=****;Initial Catalog=***;User=sa;password=***");

        //query for all specialities
        string specstring = "SELECT Speciality.Shortname, SUM(1) as contar " +
                            "FROM DoctorEnterpriseDetails INNER JOIN " +
                            "Speciality ON DoctorEnterpriseDetails.Speciality1 = Speciality.SpecialityId INNER JOIN " +
                            " GroupType ON DoctorEnterpriseDetails.GroupId = GroupType.GroupId " +
                            " WHERE (DoctorEnterpriseDetails.EnterpriseId = 48) " +
                            " GROUP BY Speciality.Shortname ";

        SqlCommand command = new SqlCommand(specstring, conn);
        command.Connection.Open();

        SqlDataAdapter myDataAdapter = new SqlDataAdapter();
        myDataAdapter.SelectCommand = command;

        // Adds rows in the DataSet
        //DataSet myDataSet = new DataSet();

        DataTable specstringtable = new DataTable();

        myDataAdapter.Fill(specstringtable);
        specstring = ""; 
        for (int i = 0; i < specstringtable.Rows.Count; i++)
        {

            if (specstring == "")
            {

                specstring = "[" + specstringtable.Rows[i][0] + "]".ToString();
            }
            else
            {
                specstring = specstring + ", " + "[" + specstringtable.Rows[i][0] + "]";

            }

        }

        //GroupGrid.DataSource = cobtable;
        //GroupGrid.DataBind();
        command.Connection.Close();

        ////query for pivot table
        string querystring = "SELECT Description AS Categoria, " + specstring +
                             "FROM (SELECT GroupType.Description, Speciality.Shortname, SUM(1) AS contar, GroupType.GroupId " +
                             "FROM DoctorEnterpriseDetails INNER JOIN " +
                             "Speciality ON DoctorEnterpriseDetails.Speciality1 = Speciality.SpecialityId INNER JOIN " +
                             "GroupType ON DoctorEnterpriseDetails.GroupId = GroupType.GroupId " +
                             "WHERE (DoctorEnterpriseDetails.EnterpriseId = 48) " +
                             "GROUP BY GroupType.Description, Speciality.Shortname, DoctorEnterpriseDetails.GroupId, GroupType.GroupId) as ps " +
                             "PIVOT (SUM(contar) FOR Shortname IN (" + specstring + ")) pvt " +
                             "ORDER BY GroupId; ";

        ////Response.Write(querystring);
        SqlCommand command2 = new SqlCommand(querystring, conn);
        command2.Connection.Open();

        SqlDataAdapter myDataAdapter2 = new SqlDataAdapter();
        myDataAdapter2.SelectCommand = command2;

        // Adds rows in the DataSet
        //DataSet myDataSet2 = new DataSet();

        DataTable cobtable = new DataTable();

        myDataAdapter2.Fill(cobtable);

        DataColumn cl = cobtable.Columns.Add("Total");
        cobtable.Columns["Total"].SetOrdinal(1);

        DataRow dr;
        dr = cobtable.NewRow();
        dr["Categoria"] = "Total";
        cobtable.Rows.InsertAt(dr, 0);
        dr = cobtable.NewRow();
        dr["Categoria"] = "";
        cobtable.Rows.InsertAt(dr, 1);
        dr = cobtable.NewRow();
        dr["Categoria"] = "%";
        cobtable.Rows.InsertAt(dr, 3);
        dr = cobtable.NewRow();
        dr["Categoria"] = "";
        cobtable.Rows.InsertAt(dr, 4);
        dr = cobtable.NewRow();
        dr["Categoria"] = "%";
        cobtable.Rows.InsertAt(dr, 6);
        dr = cobtable.NewRow();
        dr["Categoria"] = "";
        cobtable.Rows.InsertAt(dr, 7);
        dr = cobtable.NewRow();
        dr["Categoria"] = "%";
        cobtable.Rows.InsertAt(dr, 9);

        GroupGrid.DataSource = cobtable;
        GroupGrid.DataBind();


    }

0 个答案:

没有答案