Как написать SqlCommand, который выбирает три наиболее повторяющихся значения в столбце в ASP.NET - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь получить наиболее продаваемые предметы из формата выбора даты «от-до». У меня есть SqlCommand Я пытаюсь запустить, но он не работает.

SqlCommand cmd = new SqlCommand("SELECT TOP 3 Sold COUNT(Sold) AS MOST_FREQUENT FROM Transactions GROUP BY Sold ORDER BY COUNT(Sold) DESC WHERE Dates Between'" + Convert.ToDateTime(txtDate.Text) + "' and '" + Convert.ToDateTime(txtDate2.Text) + "'", con);

Обновлено

("SELECT TOP 3 Sold, COUNT(Sold) AS MOST_FREQUENT FROM Transactions GROUP BY Sold WHERE Dates Between '"+Convert.ToDateTime(txtDate.Text)+"' and '"+Convert.ToDateTime(txtDate2.Text)+"' ORDER BY COUNT(Sold) DESC", con);

Обновление 2 полный код

protected void btnApply_Click(object sender, EventArgs e)
{
    string CS = ConfigurationManager.ConnectionStrings["POS_SystemConnectionString2"].ConnectionString;

    using (SqlConnection con = new SqlConnection(CS))
    {
        if (txtDate.Text != null && txtDate2.Text != null)
        {
            SqlCommand cmd = new SqlCommand("SELECT TOP 3 Sold, COUNT(Sold) AS MOST_FREQUENT FROM Transactions WHERE Sold GROUP BY Dates Between '"+Convert.ToDateTime(txtDate.Text)+"' and '"+Convert.ToDateTime(txtDate2.Text)+"' ORDER BY COUNT(Sold) DESC", con);

            con.Open();

            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            sda.Fill(dt);

            if (dt.Rows.Count != 0)
            {
                GridView1.DataSource = dt;
                GridView1.DataBind();
            }
            else
            {
            }
        }

        con.Close();
    }
}

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

ВЫБЕРИТЕ ТОП 3 Продано, СЧЕТ (Продано) КАК НАИБОЛЕЕ ЧАСТИЧНО ОТ Транзакций, ГДЕ Даты Между '"+ Convert.ToDateTime (txtDate.Text) +"' и "" + Convert.ToDateTime (txtDate2.Text) + "'GROUP BY Продано ЗАКАЗАТЬ ПО СЧЕТУ (Продано) DESC

Группировка по и порядок по должны быть после предложения where.

0 голосов
/ 19 апреля 2019

У вас синтаксическая ошибка, пропущенная запятая (,) после столбца SOLD в списке выбора, а также перемещение порядка по предложению в конце и предложения where перед Группой следующим образом:

Порядок пунктов должен быть SELECT, WHERE, GROUP BY, Порядок по

protected void btnApply_Click(object sender, EventArgs e)
        {
            string CS = ConfigurationManager.ConnectionStrings["POS_SystemConnectionString2"].ConnectionString;
            using (SqlConnection con = new SqlConnection(CS))
            {
                if (txtDate.Text != null && txtDate2.Text != null)
                {
                    SqlCommand cmd = new SqlCommand("SELECT TOP 3 Sold, COUNT(Sold) AS MOST_FREQUENT FROM Transactions WHERE Dates Between '"+Convert.ToDateTime(txtDate.Text)+"' and '"+Convert.ToDateTime(txtDate2.Text)+"'  GROUP BY Sold ORDER BY COUNT(Sold) DESC", con);

                    con.Open();
                    SqlDataAdapter sda = new SqlDataAdapter(cmd);

                    DataTable dt = new DataTable();

                    sda.Fill(dt);

                    if (dt.Rows.Count != 0)
                    {
                        GridView1.DataSource = dt;
                        GridView1.DataBind();
                    }
                    else
                    {

                    }


                }

                con.Close();

            }

Кроме того, вы должны использовать параметризованные запросы вместо конкатенации значений параметров в строке, чтобы избежать SQL-инъекций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...