Member 12349103 Ответов: 1

C# как получить 10 лучших повторяющихся чисел из столбца


У меня есть winform с базой данных access. Мне нужно получить 10 лучших повторяющихся чисел в столбце. Приведенный ниже код дает мне первые 10 чисел в столбце.




private void btn_Top_10_Click(object sender, EventArgs e)
        {
            string queryString = "SELECT ListSheetID, Part FROM Post";
            queryString = "select top 10 ListSheetID,Part from Post";
            loadDataGrid(queryString);
        }


Что я уже пробовал:

Приведенный выше пример и многое другое о том, как смотреть и читать в сети.

1 Ответов

Рейтинг:
9

an0ther1

Быстрый и грязный метод;

SELECT TOP 10 * FROM
    (SELECT ListSheetId, Part, COUNT(*) as RCount FROM Post GROUP BY ListSheetId, Part) AS MyTable
ORDER BY RCount DESC


Предположим, что следующие данные
ListSheetId, Часть
12, колесо
10, ось
1, сиденье
12, колесо
10, ось
1, сиденье
1, сиденье
1, сиденье
10, ось
1, сиденье
1, сиденье
12, колесо
12, колесо
12, колесо
1, сиденье
1, сиденье
1, сиденье
1, сиденье
1, сиденье

Как это работает.
Внутренний запрос возвращает список ListSheetId, части усилителя; amp; подсчет количества листов & части
результирующий набор:
ListSheetId, Part, Count
12, колесо, 5
10, ось, 3
1, место 11
Внешний запрос возвращает первые 10 результатов после оформления заказа внутреннего запроса по столбцу количество. Если бы вышеприведенный запрос был изменен на выбор ТОП-2, то результирующий набор был бы следующим;
ListSheetId, Part, Count
1, место 11
12, колесо, 5

Дополнительная информация;
GROUP BY создает различные списки, предположим, что следующие данные;
ListSheetId, Part, Count
12, колесо, 5
10, ось, 3
1, место 11
12, ось, 8
10, сиденье, 4

Если бы вышеприведенный запрос был изменен на выбор топ-4, то результирующий набор был бы следующим;
ListSheetId, Part, Count
1, место 11
12, ось, 8
12, колесо, 5
10, сиденье, 4

Это происходит потому, что GROUP BY идентифицирует различные значения во всех Столбцах в предложении group by - Примечание: Count не включается, поскольку он является агрегатным методом и не входит в предложение Group By.
Поэтому 1 & Seat, 12 & Axle, 12 & Wheel & 10 & Seat-это первые 4 различных значения после применения метода сортировки

Если это не то, что вам нужно, пожалуйста, улучшите свой вопрос, добавив примеры данных и результирующие наборы


с уважением


Member 12349103

Это то, что мне нужно сделать, но я вообще не могу заставить этот код работать.

an0ther1

Так что же происходит?
Если вы выполняете запрос в Access, работает ли он так, как ожидалось?
Если нет, то вам нужно будет выяснить, почему он не дает вам то, что вы хотите.
Если это так, то вам нужно отладить приложение WinForm.
Дополнительную информацию смотрите в обновленном решении

Member 12349103

Это для моего щелчка по кнопке? В каждом слове есть ошибка, видимо, я не знаю, куда ее девать.

an0ther1

Шаг 1: Создайте новый запрос в Access и подтвердите, что он возвращает ожидаемые результаты.
Шаг 2: Замените событие нажатия кнопки следующим образом;

string queryString = "My Tested Query HERE";
LoadDataGrid(queryString);