Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242

Запрос на добавление строки при определенных условиях

28.11.2014, 03:14. Показов 1695. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
имеются 2 таблицы: пропуски - id_пропуска, id_ученика, дата_пропуска, количество_пропусков; отчисления: id_ученика, количество_пропусков;
в первой таблице id_ученика могут повторятся;
нужно для каждого ученика посчитать кол-во пропусков и в случае превышения n добавить этого ученика в таблицу отчисления.
Помогите плз
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.11.2014, 03:14
Ответы с готовыми решениями:

Закрашивание строки в цвет, при определенных условиях
В общем есть таблица, последний столбец (10й) время (типа 11:02:51). Нужно закрасить те строки, которые повторяются по всем столбцам, кроме...

Значения надписи при определённых условиях
Всем привет. У меня есть отчёт с данными пользователя и результатами анкетирования, 5 шкал со своими баллами у каждой шкалы. Не могу...

Транспонировать матрицу при определенных условиях
Помогите , пожалуйста , решить задачу. Дана действительная матрица размерности . Если среднее арифметическое элементов стоящих над...

15
 Аватар для sigmov
585 / 372 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
28.11.2014, 04:16
SQL
1
2
3
INSERT INTO <ТаблицаОтчисления>(ИД_отчисления, ИД_ученик) 
SELECT ИД_УЧЕНИК FROM Ученики
WHERE COUNT(SELECT * FROM Пропуски WHERE Пропуски.ИД_Ученик = Ученики.ИД_Ученики) > @N
0
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
28.11.2014, 16:32  [ТС]
sigmov, не работает, пишет incorrect syntax near select
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
28.11.2014, 16:54
Цитата Сообщение от sigmov Посмотреть сообщение
WHERE COUNT
Число полей в SELECT не совпадает с числом полей в INSERT INTO. И с каких это пор COUNT пишется в WHERE?
0
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
28.11.2014, 16:58  [ТС]
Grossmeister, подскажите как исправить
0
311 / 309 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
28.11.2014, 17:20
Вы указываете в таблице <Таблица отчисления> 2 поля: ИД_отчисления, ИД_ученик, а вставляете в строку значение только для одного: ИД_УЧЕНИК. Либо укажите значение для первого поля, либо, что скорее всего, оно у Вас автоинкрементное и тогда его нужно просто убрать из запроса Insert
1
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
28.11.2014, 17:42  [ТС]
kontuPauk, я попытался исправить вот так
SQL
1
2
3
INSERT INTO Отчисление(ID_ученика, Количество_пропусков) 
        SELECT ID_ученика, Количество_пропусков FROM Пропуски
        WHERE COUNT(SELECT * FROM Пропуски WHERE Пропуски.ID_ученика = Ученики.ID_ученика) > 8
но все-равно та же ошибка
0
311 / 309 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
28.11.2014, 17:55
Попробуйте имена таблиц и полей заключить в квадратные скобки []. Я надеюсь у Вас в базе есть и таблицы и поля, имена которых Вы в запросе используете?
Хотя каша у Вас в запросе, конечно...
1
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
28.11.2014, 17:59  [ТС]
kontuPauk, до этого писал запросы без [], поля есть, каша может и каша, но я взял запрос, который мне написали повыше
0
311 / 309 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
28.11.2014, 18:05
Ну вот в первом случае у Вас было поле ИД_УЧЕНИК, а сейчас вдруг ID_ученика...
Подозрительно, знаете ли...
1
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
28.11.2014, 18:07  [ТС]
kontuPauk, прочитайте первоначальное условие, я писал, что поле id_ученика, мне кажется, что этот запрос изначально не правильно был написан во втором посте
0
311 / 309 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
28.11.2014, 18:47
Ну вот, что бы написал я при условиях первого задания:
SQL
1
2
3
4
5
INSERT INTO [отчисления] ([id_ученика], [количество_пропусков])  
   SELECT [id_ученика], SUM([количество_пропусков]) 
      FROM [пропуски] 
      GROUP BY [id_ученика]
      HAVING SUM([количество_пропусков]) > @maxCount
1
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
28.11.2014, 19:13  [ТС]
kontuPauk, подскажите, а как сделать, чтобы ученика в таблицу отчисления не заносило повтороно, если он там уже есть
0
311 / 309 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
28.11.2014, 19:36
Например, предварительно проверять наличие записи в таблице.
1
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
28.11.2014, 20:28  [ТС]
kontuPauk,
SQL
1
2
3
4
5
INSERT INTO [отчисление] ([id_ученика], [количество_пропусков])  
        SELECT [id_ученика], SUM([количество_пропусков]) 
        FROM [пропуски]  
        GROUP BY [id_ученика]
        HAVING SUM([количество_пропусков]) > 4 AND NOT EXISTS(SELECT * FROM Пропуски, Отчисление WHERE Пропуски.ID_ученика = Отчисление.ID_ученика)
написал вот так, работает, подскажите теперь, как сделать, чтобы в случае нахождения записи в отчислениях, поле в этой таблице апдейтилось(ну количество пропусков этого ученика увеличивалось)

Добавлено через 3 минуты
а нет, не работает работает только с одной записью, т.е. если я после добавления одной записи, пытаюсь добавить вторую запись, то в отчисление новая запись не заносится

Добавлено через 25 минут
решил проблему, но мой способ мне не нравится подскажите, мб как-то получше его можно сделать
SQL
1
2
3
4
5
6
                TRUNCATE TABLE Отчисление
        INSERT INTO [отчисление] ([id_ученика], [количество_пропусков])  
        SELECT [id_ученика], SUM([количество_пропусков]) 
        FROM [пропуски]  
        GROUP BY [id_ученика]
        HAVING SUM([количество_пропусков]) > 4
0
311 / 309 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
28.11.2014, 22:32
Лучший ответ Сообщение было отмечено Fene4ka_ как решение

Решение

SQL
1
2
3
4
5
6
INSERT INTO [отчисление] ([id_ученика], [количество_пропусков])  
        SELECT [id_ученика], SUM([количество_пропусков]) 
        FROM [пропуски]  
        WHERE [id_ученика] NOT IN (SELECT [id_ученика] FROM [отчисление])
        GROUP BY [id_ученика]
        HAVING SUM([количество_пропусков]) > 4
Только сначала Update делайте. А то будет удвоение количества пропусков
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.11.2014, 22:32
Помогаю со студенческими работами здесь

Загрузить Iframe при определенных условиях
Доброго всем времени суток. У меня В конце лендоса. 2карты от яндекс. Вот так как после проверки на скорость сайта(гугл инструментом)...

Срабатывание события при определенных условиях
Нужно написать программу в которой реализируется логика движения автомобиля. В 20 часов ( if (j == 20) MaxSpeed();) нужно чтобы сработало...

Активация кнопки при определенных условиях
всем привет. реализую функцию активации кнопки при определнных условиях. вот фрагмент работающего кода procedure...

Производительность видеокарты, при определенных условиях
У меня вопрос, возьмем например видеокарту, и подключим к ней 2-3 монитора. На одном из этих мониторов, запустим игру, а на другом,...

Использовать Button_Click при определенных условиях
Помогите пожалуйста вот с такой проблемой... Сама программа что-то на подобии опросника. private void fTest_Load(object sender, EventArgs...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru