Проблема 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, для этого использовал онлайн-конвертер.

Другие вопросы по тегам