C # SQlite - Подсчет количества повторений строки с использованием Query (сложности) - PullRequest
1 голос
/ 17 июня 2011

У меня есть база данных SQLite, которая отображается в виде сетки данных в моей форме окна c #.Итак, эта база данных имеет четыре столбца.Мой особый интерес только в одной из колонок.Столбец указывает тип сообщения.Это могут быть ОШИБКИ, ТРЕВОГИ, ИНИЦИАЛИЗАЦИЯ и т. Д. Теперь я добавил функциональность, позволяющую редактировать и обновлять столбец в базе данных.

Как будто я выбираю список ТРЕВОГ и затем группирую их как ТРЕВОГА #1 (поле их типа обновлено).Точно так же ALARM # 2 и так далее ...

Все это прекрасно работает.Проблема в том, когда я хочу посчитать количество аварий.Я отправляю запрос

using(var sda=new SQLiteDataAdapter("SELECT count(*) from LogDatabase where Type like '%ALARM%'", "data source=" + database_path))
        {
            var dt = new DataTable();
            int sum_rows_selected=0;
            sda.Fill(dt);
            int alarms_total = Convert.ToInt16(dt.Rows[0][0]);
            MessageBox.Show(alarms_total.ToString());
        }

Это показывает все поля с ALARM в нем .. Итак, изначально, если в БД было 10 строк типа ALARMS.Это показывает 10, что хорошо.Но теперь, когда я редактирую 4 строки как ALARM # 1 и 5 строк как ALARM # 2 .. Я хочу, чтобы счет был 3 (# 1 как 1, # 2 как 1 и остальные ALARMS (1 здесь)) ...

Мне удалось получить некоторую странную логику, чтобы получить правильный ответ, но это работает, только если АВАРИЙНЫЕ СИГНАЛЫ отредактированы в # 1 или # 2 в то время.Если я закрою окно и вернусь, это не сработает.Он снова показывает 10 ...

Помогите пожалуйста

Спасибо

1 Ответ

2 голосов
/ 17 июня 2011

Попробуйте сгруппировать их: Не уверен, что синтаксис для SQLite отличается, но что-то вроде

SELECT Type, count(*) from LogDatabase where Type like '%ALARM%' Group by Type

Это должно дать вам

Alarm #1, 4
Alarm #2, 5
Alarm #5, 1

Мой C # ржавый, но чтобы получить все строки для обоих столбцов, вам понадобится цикл, или таблица данных, или намного больше переменных. Простите, если я испортил синтаксис.

string alarms_name[];
int alarms_total[];
int i;
For(i=0;i < dt.Count; i++){
    alarms_name[i] = Convert.ToInt16(dt.Rows[i][0]);
    alarms_total[i] = Convert.ToInt16(dt.Rows[i][1]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...