Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Alex_metro
0 / 0 / 0
Регистрация: 27.08.2017
Сообщений: 10
1

Группировка данных в таблице

17.09.2017, 22:49. Просмотров 554. Ответов 10
Метки нет (Все метки)

Ребята помогите разобраться. Как получить подобный результат? Не могу понять как группировать данные по производителю и вывести информацию в консоль? Как на рисунке.


Делаю запрос к базе данных
C#
1
2
3
4
5
6
string zap = @"SELECT Company, model, prais FROM scb.phone";
 string connStr=MyClass.stringconn;
 MySqlConnection conn = new MySqlConnection(connStr);// создаём объект для подключения к БД
 DataSet ds = new DataSet();
 MySqlDataAdapter da = new MySqlDataAdapter(zap, conn);
 da.Fill(ds);

А дальше то как?
0
Миниатюры
Группировка данных в таблице  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2017, 22:49
Ответы с готовыми решениями:

Группировка данных в запросе
Направьте пожалуйста на нужный путь. Есть таблица под названием "Реализация". Туда пользователь...

Группировка данных datagridview
Имеется БД, в которой хранятся числовые данные. Деление происходит по месяцам. Как можно...

Перебор данных в таблице.
Добрый вечер. Опять проблемма по БД. Вопрос такой как считать ячейку таблици бд Например таблица...

Изменение данных в таблице БД
Хочу изменить данные в таблице, но при подключении к источнику данных появляется ошибка(см....

Поиск данных в таблице
Ребят объясните как сделать поиск в таблице базы данных ? Есть поток который будет возобновлять...

10
OwenGlendower
Супер-модератор
Эксперт .NET
10595 / 9107 / 3883
Регистрация: 17.03.2014
Сообщений: 18,236
Записей в блоге: 1
Завершенные тесты: 2
17.09.2017, 23:57 2
Alex_metro, группировать данные можно с помощью конструкции GROUP BY.
0
Alex_metro
0 / 0 / 0
Регистрация: 27.08.2017
Сообщений: 10
18.09.2017, 20:46  [ТС] 3
Не совсем понятно. Добавил этот код. Но в консоле просто идет перебор сток записей таблицы. А как все таки сгруппировать по производителю?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
foreach (DataTable dt in ds.Tables)
            {
                Console.WriteLine(dt.TableName); // название таблицы
                // перебор всех столбцов
                foreach (DataColumn column in dt.Columns)
                    Console.Write("\t{0}", column.ColumnName);
                Console.WriteLine();
                // перебор всех строк таблицы
                foreach (DataRow row in dt.Rows)
                {
                    // получаем все ячейки строки
                    var cells = row.ItemArray;
                    foreach (object cell in cells)
                        Console.Write("\t{0}", cell);
                    Console.WriteLine();
                }
            }
0
OwenGlendower
Супер-модератор
Эксперт .NET
10595 / 9107 / 3883
Регистрация: 17.03.2014
Сообщений: 18,236
Записей в блоге: 1
Завершенные тесты: 2
18.09.2017, 20:58 4
Alex_metro, похоже я тебя неправильно понял. Тебе нужно вывести модели одного производителя друг за другом. Для этого достаточно отсортировать данные
SQL
1
2
SELECT Company, model, prais FROM scb.phone
ORDER BY Company, model
и затем при выводе в цикле смотреть выводили ли мы уже производителя для текущей строки. Если нет, то выводим имя. Затем выводим информацию о модели.
0
18.09.2017, 20:58
Alex_metro
0 / 0 / 0
Регистрация: 27.08.2017
Сообщений: 10
18.09.2017, 21:18  [ТС] 5
Да! Почти у цели. Идея ясна.
осталось расписать эту строчку

"при выводе в цикле смотреть выводили ли мы уже производителя для текущей строки. Если нет, то выводим имя. Затем выводим информацию о модели"

на языке c#
0
OwenGlendower
Супер-модератор
Эксперт .NET
10595 / 9107 / 3883
Регистрация: 17.03.2014
Сообщений: 18,236
Записей в блоге: 1
Завершенные тесты: 2
18.09.2017, 21:19 6
Alex_metro, подумай как это можно сделать. Я не буду пока давать решения.
0
Alex_metro
0 / 0 / 0
Регистрация: 27.08.2017
Сообщений: 10
18.09.2017, 21:20  [ТС] 7
Два цикла как-то увязать надо. Так?
0
OwenGlendower
Супер-модератор
Эксперт .NET
10595 / 9107 / 3883
Регистрация: 17.03.2014
Сообщений: 18,236
Записей в блоге: 1
Завершенные тесты: 2
18.09.2017, 21:21 8
Alex_metro, два цикла здесь не нужны.
0
Alex_metro
0 / 0 / 0
Регистрация: 27.08.2017
Сообщений: 10
18.09.2017, 23:18  [ТС] 9
Ну. Вот. Заработало.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 string a = "";
            // перебор всех таблиц
            foreach (DataTable dt in ds.Tables)
            {
                // перебор всех строк таблицы
                foreach (DataRow row in dt.Rows)
                {
                    if (a != row[0].ToString())
                    {
                        Console.WriteLine(row[0]);
                    }
                    a = row[0].ToString();
 
                    // получаем все ячейки строки
                    string id = row[1].ToString();
                    string tip = row[2].ToString();
                    Console.WriteLine(id+" "+tip);
                }
            }
Спасибо за идею!
0
OwenGlendower
Супер-модератор
Эксперт .NET
10595 / 9107 / 3883
Регистрация: 17.03.2014
Сообщений: 18,236
Записей в блоге: 1
Завершенные тесты: 2
18.09.2017, 23:26 10
Alex_metro, молодец. Пара советов:
1) Цикл по таблицам здесь не нужен т.к. запрос всегда возвращает одну таблицу
2) К колонкам лучше обращаться по именам, а не индексам. Это улучшает читабельность кода и страхует от ошибок
3) Переменным следует давать понятные имена
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
string prevCompany = "";
 
// перебор всех строк таблицы
foreach (DataRow row in ds.Tables[0].Rows)
{
    string company = row["Company"].ToString()
    if (prevCompany != company)
    {
        Console.WriteLine(company);
    }
    prevCompany = company;
 
    // получаем все ячейки строки
    string model = row["model"].ToString();
    string price = row["prais"].ToString();
    Console.WriteLine(model + " " + price);
}
P.S. Если есть возможность, то переименуй в базе данных колонку prais в price. Орфографические ошибки портят код как и любой другой текст.
0
Alex_metro
0 / 0 / 0
Регистрация: 27.08.2017
Сообщений: 10
19.09.2017, 13:08  [ТС] 11
Спасибо дружище!
0
19.09.2017, 13:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2017, 13:08

Эффективное обновление данных в таблице
есть таблица на SQL Server есть прога для ее редактирования суть в том что редактировать ее могут...

Обновление данных в связанной таблице
Есть 3 таблицы: товары, поставщики, контракты. Контракты содержат ключи для связи с товарами и...

DataGridView обновление данных в таблице
Доброго времени суток. Я хотел в программе сделать чтобы все изменения сделанные в dgv сохранялись...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru