Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
 Аватар для MORGAN_2016
11 / 11 / 2
Регистрация: 29.12.2015
Сообщений: 56

Как группировать все оценки и предметы в одну строку, с запятыми?

29.12.2015, 17:53. Показов 3862. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте
Вопрос такой: Как группировать все оценки и предметы в одну строку, с запятыми!
В моем коде получается но только (first,Last) можно другим способам чтобы не только первый и последний а все

код такой

SQL
1
2
3
4
5
6
7
  SELECT student.id, student.fio, student.klass, student.data_ocen,
 FIRST([student].predmet) & 
IIf(COUNT([student].predmet)>1,"," & LAST([student].predmet)) AS Сообщение
 
FROM student
GROUP BY student.id, student.fio, student.klass, student.data_ocen
;
Миниатюры
Как группировать все оценки и предметы в одну строку, с запятыми?  
Вложения
Тип файла: rar Student.rar (18.7 Кб, 14 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.12.2015, 17:53
Ответы с готовыми решениями:

Поиск в форме оценки ученика и предметы
здравствуйте как сделать так чтобы в форме при выборе фамилии (или ФИО) выводились --оценки ученика и --предметы по которым он...

GET HTTP запросы. Как распарсить строку, получив все значения, разделенные запятыми
Всем привет. Пишу софтину, которая управляет освещением в комнате. GET запрос я научился делать и получаю результат. Но в результате...

Объединить столбец слов в одну строку, разделив слова запятыми и в кавычках
Имеется очень большой столбец слов, нужно из него сформировать массив для ЯП такого формата: array = ; Не обязательно формировать все...

35
 Аватар для MORGAN_2016
11 / 11 / 2
Регистрация: 29.12.2015
Сообщений: 56
29.12.2015, 19:23  [ТС]
неужели никого нет в форуме
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
29.12.2015, 19:34
Смотрим здесь Объединить две и более строки и при этом сложить данные в трех и более столбцах.
0
 Аватар для MORGAN_2016
11 / 11 / 2
Регистрация: 29.12.2015
Сообщений: 56
29.12.2015, 19:42  [ТС]
Все примеры посмотрел
мне с модулем не получается, можно без использование модулей?
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
29.12.2015, 19:53
Лучший ответ Сообщение было отмечено alvk как решение

Решение

Нет. Без такой (или аналогичной) функции решение мне неизвестно.
1
 Аватар для MORGAN_2016
11 / 11 / 2
Регистрация: 29.12.2015
Сообщений: 56
29.12.2015, 19:55  [ТС]
А функция которые в модуле как можно использовать в VB.net?
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
29.12.2015, 20:00
О VB.net спрашивайте в соответствующем разделе ... . И причем здесь это - для Аксесса есть VBA.
0
 Аватар для MORGAN_2016
11 / 11 / 2
Регистрация: 29.12.2015
Сообщений: 56
01.01.2016, 07:38  [ТС]
А с помощью функции CONCAT() не возможно ли? как использовать этот функцию в Ms Access я пробовал в Mysql
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
02.01.2016, 06:12
Цитата Сообщение от MORGAN_2016 Посмотреть сообщение
можно без использование модулов?
В принципе есть такой метод. Без использования ВБА. Смотрите обзор Юрия Шермана, опубликован здесь http://hiprog.com/index.php?op... &Itemid=35. Без ВБА метод 3 (по Митину).

Есть и другой метод. Идея была предложена не помню кем, возможно Бенедиктом или qwrqwr. Не скажу не помню. Суть его в том, что в таблице, отсортированной по уникальному полю (например счетчику) попарно "складываются" рядом стоящие записи. Каждый последующий запрос уменьшает вдвое выводимое количество записей. Таким образом для выполнения требуется K совершенно идентичных запросов, где K степень двойки, ближайшая сверху к максимальному количеству предметов.
В выложенной БД две группы запросов по изложенному методу. Первый, с именами запросов qT*, основан непосредственно на таблице экзаменов "examen". К сожалению, мне не удалось добиться, чтобы не выводились паразитные символы разделителей (может не очень старался ). Вторая группа запросов с именами qEx основана на вспомогательной таблице "exm", которая создается запросом "to_exm". Здесь уже все чисто.

Приведенные запросы работают до количества предметов меньше или равно 16. Если предметов больше, то надо создать еще запрос, копию q**4, где только во FROM поменять источник с q**3 на q**4. Например для 32 предметов запрос qEx5 будет
SQL
1
2
3
SELECT qT.FIO, qT.nom\2+1 AS nom, qT.BLOCK & IIf(qT_1.BLOCK & ""="","",qT_1.BLOCK) AS BLOCK
FROM qEx4 AS qT LEFT JOIN qEx4 AS qT_1 ON (qT.nom=qT_1.nom-1) AND (qT.FIO=qT_1.FIO)
WHERE (qT.nom MOD 2)=1;
Ну и разумеется Вам надо поменять имена таблиц и полей в них на свои. Если бы Вы выложили свою БД, можно было сделать прямо в ней. А так уж сами.
Вложения
Тип файла: rar Concat.rar (15.5 Кб, 14 просмотров)
2
 Аватар для MORGAN_2016
11 / 11 / 2
Регистрация: 29.12.2015
Сообщений: 56
02.01.2016, 13:08  [ТС]
Ошибка :
Выбранная последовательность сортировки не поддерживается операционной системой.
Что это означает?
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
02.01.2016, 14:43
Еще один вариант "сборки" строк запросом без vba. Сразу говорю, что он менее универсальный, чем предложенный mobile, но в вашем конкретном случае тоже имеет право на жизнь.

Я себе позволила нормализовать вашу базу, разделив вашу одну таблицу на три: студенты, предметы и оценки.

Запрос result вспомогательный, он собирает название предмета и оценку в одну строку с девисом и точкой с запятой.

Основной запрос вот этот:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT DISTINCT student.id, student.FIO, student.klass, 
  iif(R1.predmet_id=1,R1.ocen,"") & 
  iif(R2.predmet_id=2,R2.ocen,"") & 
  iif(R3.predmet_id=3,R3.ocen,"") & 
  iif(R4.predmet_id=4,R4.ocen,"") & 
  iif(R5.predmet_id=5,R5.ocen,"") & 
  iif(R6.predmet_id=6,R6.ocen,"") & 
  iif(R7.predmet_id=7,R7.ocen,"") &
  "" AS RESULT
FROM (((((((
student
 LEFT JOIN RESULT AS R1 ON (student.id = R1.student_id AND (R1.predmet_id=1 OR R1.predmet_id IS NULL)))
 LEFT JOIN RESULT AS R2 ON (student.id = R2.student_id AND (R2.predmet_id=2 OR R2.predmet_id IS NULL)))
 LEFT JOIN RESULT AS R3 ON (student.id = R3.student_id AND (R3.predmet_id=3 OR R3.predmet_id IS NULL)))
 LEFT JOIN RESULT AS R4 ON (student.id = R4.student_id AND (R4.predmet_id=3 OR R4.predmet_id IS NULL)))
 LEFT JOIN RESULT AS R5 ON (student.id = R5.student_id AND (R5.predmet_id=5 OR R5.predmet_id IS NULL)))
 LEFT JOIN RESULT AS R6 ON (student.id = R6.student_id AND (R6.predmet_id=6 OR R6.predmet_id IS NULL)))
 LEFT JOIN RESULT AS R7 ON (student.id = R7.student_id AND (R7.predmet_id=7 OR R7.predmet_id IS NULL)))
;
Специально привела здесь полный текст по двум причинам:

1) конструктор запросов в Access неадеквано реагирует на сложные условия объединения таблиц и все время норовит стереть скобки между ON и следующим LEFT JOIN, после чего, естественно, запрос становится нерабочим. Поэтому в режиме конструктора этот запрос не нужно открывать, а открывать в режиме таблицы и из него переходть сразу в SQL. Но если случайно открыли в конструкторе и запрос перестал работать - копируем с форума исходный текст.

2) По тексту запроса хорошо видно, как модифицировать его для случая чсила предметов >7
Просто продолжаем добавлять строчки по аналогии.
Вложения
Тип файла: rar Student.rar (49.6 Кб, 12 просмотров)
1
 Аватар для MORGAN_2016
11 / 11 / 2
Регистрация: 29.12.2015
Сообщений: 56
02.01.2016, 15:58  [ТС]
texnik-san, не могу поменять имена таблиц и полей на свои в запросе Totalresult

даёт вот такую ошибку
не поддерживается выражение объединения Join
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
02.01.2016, 16:08
Цитата Сообщение от MORGAN_2016 Посмотреть сообщение
не поддерживается выражение объединения Join
Сокрее всего, это как раз скобочки потерялись (о чем я выше писала). Этот запрос невозможно править в режиме конструктора.

ВАЖНО: как бы ни менялись имена полей и таблиц, студенты и их оценкци должны быть в разных таблицах.
0
 Аватар для MORGAN_2016
11 / 11 / 2
Регистрация: 29.12.2015
Сообщений: 56
02.01.2016, 16:08  [ТС]
Цитата Сообщение от texnik-san Посмотреть сообщение
в режиме конструктора этот запрос не нужно открывать
всё решил вам огромное спасибо
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
02.01.2016, 16:29
А, что еще может быть: нужно внимательно посчитать число скобочек после FROM - открывающих должно быть ровно столько, сколько строчек LEFT JOIN.

Добавлено через 5 минут
Возможость задавать условия на значения таблиц прямо в выражении объединения - отличная штука, иногда позволяющая сделать прямо в одном запросе то, что пришлось бы делать кучей подзапросов в случае, если бы условия можно было накладывать только в Where. Более того, по моим ощущениям - такие запросы еще и быстрее, чем с условиями в Where, работают.

НО конструктор запросов, блин!!!

Если кто-то знает, как его отключить или сделать так, чтобы прямо из области переходов можно было открывать запросы в виде SQL - буду очень благодарна за совет.

Добавлено через 12 минут
Ага, и еще два замечания:

1) я таки невнимательная, и в строке
LEFT JOIN RESULT AS R4 ON (student.id = R4.student_id AND (R4.predmet_id=3 OR R4.predmet_id IS NULL)))
осталась неисправленная на четверку тройка. Должно быть R4.predmet_id=4

2) у студента с номером 1 по предмету номер 4 две разных оценки, поэтому в итоговую выборку он попадает дважды. Если это неправильно - то лишнюю строку нужно отсечть еще во вспомогательном запросе result.
1
 Аватар для MORGAN_2016
11 / 11 / 2
Регистрация: 29.12.2015
Сообщений: 56
02.01.2016, 18:31  [ТС]
А как использовать условию(where) так чтобы у те кого нет оценок не были в списке
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
02.01.2016, 18:47
Вот вам текст для моего варианта:

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT DISTINCT student.id, student.FIO, student.klass, 
  iif(R1.predmet_id=1,R1.ocen,"") & 
  iif(R2.predmet_id=2,R2.ocen,"") & 
  iif(R3.predmet_id=3,R3.ocen,"") & 
  iif(R4.predmet_id=4,R4.ocen,"") & 
  iif(R5.predmet_id=5,R5.ocen,"") & 
  iif(R6.predmet_id=6,R6.ocen,"") & 
  iif(R7.predmet_id=7,R7.ocen,"") AS RESULT
FROM (((((((
(student INNER JOIN ozenka ON student.id=ozenka.student_id)
 LEFT JOIN RESULT AS R1 ON (student.id = R1.student_id AND (R1.predmet_id=1 OR R1.predmet_id IS NULL)))
 LEFT JOIN RESULT AS R2 ON (student.id = R2.student_id AND (R2.predmet_id=2 OR R2.predmet_id IS NULL)))
 LEFT JOIN RESULT AS R3 ON (student.id = R3.student_id AND (R3.predmet_id=3 OR R3.predmet_id IS NULL)))
 LEFT JOIN RESULT AS R4 ON (student.id = R4.student_id AND (R4.predmet_id=4 OR R4.predmet_id IS NULL)))
 LEFT JOIN RESULT AS R5 ON (student.id = R5.student_id AND (R5.predmet_id=5 OR R5.predmet_id IS NULL)))
 LEFT JOIN RESULT AS R6 ON (student.id = R6.student_id AND (R6.predmet_id=6 OR R6.predmet_id IS NULL)))
 LEFT JOIN RESULT AS R7 ON (student.id = R7.student_id AND (R7.predmet_id=7 OR R7.predmet_id IS NULL)))
UNION SELECT student.id, student.FIO, student.klass, "" FROM student WHERE FALSE;
Последнюю строчку с (UNION SELECT с заведомо пустым набором записей) дописала, чтобі запрос не открывался в режиме конструктора (саму бесит постоянно править эти скобки)
0
 Аватар для MORGAN_2016
11 / 11 / 2
Регистрация: 29.12.2015
Сообщений: 56
02.01.2016, 18:58  [ТС]
texnik-san, всё так и на свою базу подгонят не смог вот база
ещё раз вам огромное спасибо
Вложения
Тип файла: rar 1234.rar (56.4 Кб, 8 просмотров)
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
02.01.2016, 22:27
Примерно так
Вложения
Тип файла: rar 1234.rar (62.5 Кб, 7 просмотров)
0
 Аватар для MORGAN_2016
11 / 11 / 2
Регистрация: 29.12.2015
Сообщений: 56
03.01.2016, 12:48  [ТС]
texnik-san, Спасибо.
Ещё одна ошибка: Когда число предметов становится больше 18 Уже запрос ожидает очень и очень долго запрос 19_totalresult
Вложения
Тип файла: rar 123.rar (117.1 Кб, 5 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.01.2016, 12:48
Помогаю со студенческими работами здесь

Создать файл, в котором фамилии будут записаны в одну строку и разделены запятыми
Текстовый файл содержит несколько строк с фамилиями. Создать файл, в котором эти фамилии будут записаны в одну строку и разделены...

Распечатать анкетные данные студентов, получивших за все время обучения одну оценку 4, а все остальные оценки — 5.
Распечатать анкетные данные студентов, получивших за все время обучения одну оценку 4, а все остальные оценки — 5.

Распечатать анкетные данные студентов, получивших за все время обучения одну оценку 4, а все остальные оценки - 5
Добрый вечер уважаемые, интересует такой вопрос по поводу Python а именно вот такое задание Распечатать анкетные данные студентов,...

Преобразовать строку, заменив запятыми все двоеточия
Помогите решить задачу!!! :) Даны натуральное число n и символы S1, ..., Sn (строка). Преобразовать строку, заменив запятыми все...

Исправьте строку, заменив все пробелы запятыми
Пытаюсь решить задачу, никак не получается программировать только учусь не могли бы помочь? в строке S несколько слов разделенны...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru