Проблема GROUP BY, когда SELECT для dataGridView из 2 таблиц
С небольшой помощью я сделал это два QUERY
, Я разместил фотографии, чтобы вы могли видеть это в green squares
пустые значения, которые я хотел бы видеть и в red squares
это значения, которые я не хотел бы отображать. переменная vyberradek
вставляет значения для "подключ" это INT
в БД но я пропускаю string
,
Итак, я упрощу: теперь я могу показать все или немного, не могли бы вы помочь мне, как отобразить правильные записи?
Это первое query
Является ли это:
string sQuery = string.Format("SELECT zajsluz.akce,zajsluz.text,klisluz.pocet,klisluz.subkey,zajsluz.ID FROM zajsluz LEFT JOIN klisluz ON zajsluz.ID=klisluz.IDzajsluz WHERE zajsluz.akce= '{0}' GROUP BY klisluz.subkey,zajsluz.akce,zajsluz.text,klisluz.pocet,zajsluz.ID", sZakce);
Вот что делает второй query
:
string sQuery = string.Format("SELECT zajsluz.akce,zajsluz.text,klisluz.pocet,klisluz.subkey,zajsluz.ID FROM zajsluz LEFT JOIN klisluz ON zajsluz.ID=klisluz.IDzajsluz WHERE zajsluz.akce= '{0}' and klisluz.subkey ='" + vyberradek + "' GROUP BY klisluz.subkey,zajsluz.akce,zajsluz.text,klisluz.pocet,zajsluz.ID", sZakce);
Итак, как вы можете видеть, я также хотел бы отображать пустые. Я думаю, что вам также может понадобиться код, который проверяет флажки здесь:
for (int i = 0; i < dtg_ksluzby.Rows.Count; i++)
{
var row = dtg_ksluzby.Rows[i];
int id = (int)row.Cells["ID"].Value;
using (var novyprikaz3 = new SqlCommand("SELECT * from klisluz WHERE subkey='" + vyberradek + "'AND IDzajsluz=" + id, spojeni))
{
spojeni.Open();
SqlDataReader precti3 = novyprikaz3.ExecuteReader();
if (precti3.HasRows)
{
row.Cells[5].Value = true;
}
spojeni.Close();
}
}
Ребята, подскажите, пожалуйста, как query
Похоже выбрать даже не проверенное значение (которого нет в таблице klisluz) и проверенные?
Как я вижу, никто не отвечает так хорошо, позвольте мне привести один простой пример: когда я создаю клиента, я проверяю, например, 3 из 10 флажков. Таким образом, он выбирает 3 строки (и те, которые он добавляет в таблицу klisluz). И у меня есть эти два queries
, First query
показывает отмеченные флажки от других клиентов, но также и непроверенные для этого клиента. Он просто показывает все, что находится в базе данных, поэтому он показывает строки с проверенными вещами других клиентов (но только те, которые одинаковы для этого и некоторых других клиентов, он НЕ СОЗДАЕТ дубликатов). Второй показывает только проверено для этого клиента, но без тех, которые он не выбрал. Поэтому, когда я редактирую этого клиента, я хотел бы показать, что он проверял, и остальные 7(7 возможностей, которые он не проверял, чтобы я мог их проверить). Теперь я могу отображать только то, что я проверял (без не проверенных) или все, включая проверки других клиентов (которые одинаковы для этого клиента). Я надеюсь, что это понятно, извините за мой слабый английский.
PS с проверкой я имею ввиду проверку checkbox
(выбирая строку) В основном это программа, которая добавляет обслуживание клиентам.
Большое спасибо за ваш интерес, а также за чтение, если вы прочитаете все это. Я застрял с этим вопросом на 2 дня:/
Изображение для kwwallpe: Вы можете видеть здесь, что "Ник" никогда не был выбран ни одним клиентом, поэтому он отображается.
Чтобы сделать мой вопрос более понятным - я беру некоторые из этих столбцов из другой таблицы (как вы можете видеть в запросе sql).
Вот что делает код kwwallpe:
string sQuery = string.Format("SELECT zajsluz.akce,zajsluz.text,klisluz.pocet,klisluz.subkey,zajsluz.ID FROM zajsluz LEFT JOIN klisluz ON zajsluz.ID=klisluz.IDzajsluz WHERE zajsluz.akce= '{0}' and ISNULL(klisluz.subkey, '" + vyberradek + "') = '" + vyberradek + "' GROUP BY klisluz.subkey,zajsluz.akce,zajsluz.text,klisluz.pocet,zajsluz.ID", sZakce);
Этот код намного ближе, я думаю, что эти 2. Потому что это ВЫБРАТЬ значения, которые никогда не были выбраны ни одним клиентом b4. Вы можете видеть шляпу "Nic" отображается, потому что его нет в таблице klisluz.
1 ответ
Если я понимаю, что вы ищете, это часть, которая удерживает вас от получения строк без записей в klisluz:
WHERE zajsluz.akce= '{0}' and klisluz.subkey ='" + vyberradek + "'
Для строк, которые не существуют в klisluz, подраздел будет иметь значение NULL, что не будет совпадать с предложением WHERE. Чтобы получить эти строки, вы можете заменить текущее предложение WHERE на:
WHERE zajsluz.akce= '{0}' and ISNULL(klisluz.subkey, '" + vyberradek + "') ='" + vyberradek + "'
Вот полная строка кода:
string sQuery = string.Format("SELECT zajsluz.akce,zajsluz.text,klisluz.pocet,klisluz.subkey,zajsluz.ID FROM zajsluz LEFT JOIN klisluz ON zajsluz.ID=klisluz.IDzajsluz WHERE zajsluz.akce= '{0}' and ISNULL(klisluz.subkey, '" + vyberradek + "') = '" + vyberradek + "' GROUP BY klisluz.subkey,zajsluz.akce,zajsluz.text,klisluz.pocet,zajsluz.ID", sZakce);
Чтобы определить, должен ли быть установлен флажок:
if (precti3.HasRows)
{
precti3.Read();
if (precti3.Item("subkey") != Null)
{
row.Cells[5].Value = true;
}
else
{
row.Cells[5].Value = false;
}
}
Я думаю, что так будет в C#. Я работаю в VB.NET, для этого использовал онлайн-конвертер.