Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
3 / 2 / 1
Регистрация: 19.09.2017
Сообщений: 54
Delphi 6-7

Отчёт за кварталы

20.04.2020, 19:54. Показов 1661. Ответов 17

Студворк — интернет-сервис помощи студентам
Здравствуйте.

При создании отчёта столкнулся с проблемой группировки данных. Нужно, чтобы в одном отчёте было расфасована информация по кварталам (I - IV). Для одного, например, сделать легко, можно просто при написании SQL запроса указать необходимые три месяца через LIKE, но как это сделать для всех месяцев, но разделённых в группы по 3? Не могу разобраться, как правильно осуществить идею. Подскажите, пожалуйста, если вообще как-то можно решить проблемку.

Добавлено через 39 минут
Прикрепляю используемый SQL код для трёх месяцев, вдруг нужен кому-то

SQL
1
2
3
4
5
SELECT z.Codd_zay, z.Codd_komp, k.Cod_komp, k.Mod_komp, k.Kol_komp, z.Mes_zay, k.Vid_komp, z.Koll_komp, z.God_zay
FROM Заявки z, Компьютеры k
WHERE z.Codd_komp=k.Cod_komp
AND (z.Mes_zay LIKE '%март') OR (z.Mes_zay LIKE '%июнь') OR (z.Mes_zay LIKE '%апрель') 
ORDER BY z.Mes_zay ASC
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.04.2020, 19:54
Ответы с готовыми решениями:

Кварталы Манхэттена
Написать код. Кварталы Манхэттена состоят из авеню, направленных с юга на север и улиц, направленных с запада на восток. Все улицы и...

Кварталы Манхэттена
Кварталы Манхэттена состоят из авеню, направленных с юга на север и улиц, направленных с запада на восток. Все улицы и авеню пронумерованы...

Год разбить на кварталы и отобразить в ListBox (Paradox, BDE)
нужно в компонент listbox поместить для выбора последовательность годовых кварталов начиная с 4кв2010, т.е. 2 квартал 2011 1 квартал...

17
5975 / 4550 / 1095
Регистрация: 29.08.2013
Сообщений: 28,169
Записей в блоге: 3
20.04.2020, 20:51
в селекте через case анализировать месяц и выводить номер квартала
0
3 / 2 / 1
Регистрация: 19.09.2017
Сообщений: 54
20.04.2020, 21:43  [ТС]
Примерно так:

SQL
1
2
3
4
5
6
:kvart 
SELECT mes 
CASE mes
WHEN mes = 'январь'
THEN kvart:='1-ый квартал'
FROM DATA
Или всё не так?

Добавлено через 40 минут
Пробую вот так, но не получается ничего

SQL
1
2
3
4
5
6
7
8
DECLARE @kvart INT;
SELECT z.Codd_zay, z.Codd_komp, k.Cod_komp, k.Mod_komp, k.Kol_komp, z.Mes_zay, k.Vid_komp, z.Koll_komp, z.God_zay
CASE z.Mes_zay
WHEN z.Mes_zay = '%май' OR z.Mes_zay = '%апрель' OR z.Mes_zay = '%июнь' 
THEN SET @kvart = '1'
END
FROM Заявки z, Компьютеры k
WHERE z.Codd_komp=k.Cod_komp
Подскажите, пожалуйста, что я пишу не так. Почитал мануалы, но как-то непонятно для меня :с
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
20.04.2020, 23:55
Есть еще UNION, с помощью которого можно объединять несколько похожих запросов, для каждого квартала свой.
-----
А при чём здесь LIKE? Like и подстановочный символ используются для не точного сравнения. А как наименование месяца может быть не точным? ТМАЙ или МА что ли?
-----
Опять же, определять квартал только по названию месяца - это не корректно, ошибка.
Данные за месяцы могут быть из разных лет. Так что группировать данные по кварталам нужно с использованием периодов, где используются даты начала и конца кварталов. ДАТЫ, а не месяцы.
1
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,405
Записей в блоге: 3
21.04.2020, 08:13
Цитата Сообщение от Скандербег Посмотреть сообщение
ТМАЙ или МА что ли?
ЯБРЬ...
0
5975 / 4550 / 1095
Регистрация: 29.08.2013
Сообщений: 28,169
Записей в блоге: 3
21.04.2020, 09:19
SQL
1
2
3
4
5
6
7
8
SELECT z.Codd_zay, z.Codd_komp, k.Cod_komp, k.Mod_komp, k.Kol_komp, z.Mes_zay, k.Vid_komp, z.Koll_komp, z.God_zay
CASE WHEN z.Mes_zay IN ('','','') THEN kvartal=1
 WHEN z.Mes_zay IN ('','','') THEN kvartal=2
 WHEN z.Mes_zay IN ('','','') THEN kvartal=3
 WHEN z.Mes_zay IN ('','','') THEN kvartal=4
END
FROM Заявки z
INNER JOIN Компьютеры k ON z.Codd_komp=k.Cod_komp
вы бы по SQL книжечку то пролистали

Добавлено через 49 секунд
можно и не месяц анализировать, а проверять datepart от даты
1
3 / 2 / 1
Регистрация: 19.09.2017
Сообщений: 54
21.04.2020, 11:38  [ТС]
Используя Ваш код, выдаёт ошибку

В SQL я очень плох, т.к. особо его ещё не изучал, но, к сожалению, его приходится использовать в курсовом проекте. Пробовал разбираться, но всё равно ничего не понял, хотя делаю по примерам, а всё равно вылезают ошибки :с
Миниатюры
Отчёт за кварталы  
0
5975 / 4550 / 1095
Регистрация: 29.08.2013
Сообщений: 28,169
Записей в блоге: 3
21.04.2020, 11:42
запятую забыл
0
3 / 2 / 1
Регистрация: 19.09.2017
Сообщений: 54
21.04.2020, 11:46  [ТС]
С ней то же самое
Миниатюры
Отчёт за кварталы  
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
21.04.2020, 11:52
Нет в SQL Аксесса выражения CASE.

ddellog,
- неплохо бы сразу рассказать в какой СУБД строилась база данных;
- чтобы получить исчерпывающий ответ, надо выложить базу и проект.
0
3 / 2 / 1
Регистрация: 19.09.2017
Сообщений: 54
21.04.2020, 11:57  [ТС]
Преподаватель нам рассказывала, что язык SQL универсален для любых СУБД, потому и не посчитал нужным упоминать среду, прошу прощения.

СУБД Access, среда разработки Delphi 7.

Прикрепляю актуальную на данный момент БД и проект.

Форма, в которой сидит проблема - KvartKomp

Основная БД - sklad.mdb
Вложения
Тип файла: zip Delphi.zip (1.65 Мб, 1 просмотров)
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
21.04.2020, 12:18
ddellog, позволю полюбопытствовать. Почему в прицепленной базе и в помине нет наименований полей, о которых упоминаются в запросе: z.Codd_zay, z.Codd_komp, ...?

---
Ошибка при построении базы: разделение даты оформления заказа на три поля.
Это и привело к большим проблемам: пришлось городить огород с месяцами, которые в каждом году бывают одинаковыми (как в базе и есть). Тогда без привлечения года никак не получим правильный результат.

Если бы дата оформления была в нормальном формате и, разумеется, хранилась в одном поле, то можно было бы отфильтровать записи по периоду:
... WHERE Dt between <Датаначалоквартала> and <Датаконцаквартала>
Просто и эффективно.
1
3 / 2 / 1
Регистрация: 19.09.2017
Сообщений: 54
21.04.2020, 12:26  [ТС]
Т.е. при имеющейся структуре ничего не сделать?
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
21.04.2020, 12:30
Наверное можно, но решения не видно.
А что, так сложно переделать структуру, чтобы после, практически сразу, получить нужный результат?
0
21.04.2020, 12:35

Не по теме:

Цитата Сообщение от ddellog Посмотреть сообщение
СУБД Access, среда разработки Delphi 7
что за ужас

0
3 / 2 / 1
Регистрация: 19.09.2017
Сообщений: 54
21.04.2020, 12:37  [ТС]
А можно, исходя из того, что сейчас есть, отсортировать кварталы просто по месяцам? Т.е. пусть он для первого квартала он берёт, допустим, январь 2019 и январь 2020 года, а насчёт самих годов при формировании отчёта что-нибудь придумал бы сам.

Добавлено через 41 секунду
Таковы требования курсового проекта, не я выбирал -_-
Самому не нравится, если честно.
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
21.04.2020, 12:49
Цитата Сообщение от ddellog Посмотреть сообщение
он берёт, допустим, январь 2019 и январь 2020 года,
Сортировка и фильтрация - это разные вещи.
Здесь решить проблему сортировкой не получится. Должны стоять фильтры, которые бы пропускали данные за какой-либо квартал одного года. Так что менять структуру придётся, если, конечно, не найдется отчаянный, у которого бы получилось поставить фильтр на квартал при существующей структуре даты.
1
3 / 2 / 1
Регистрация: 19.09.2017
Сообщений: 54
21.04.2020, 12:56  [ТС]
В таком случае спасибо большое всем за помощь и советы, буду пробовать что-то сделать сам
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.04.2020, 12:56
Помогаю со студенческими работами здесь

Отчет СКД. Вывод нескольких таблиц в отчет из разных запросов.
Привет, коллеги! Возникла необходимость в одном отчете видеть 2 таблички: одну по продажам, другую по взаиморасчетам. Одним запросом...

Как отчет из построителя отчетов сохранить во внешний отчет?
В консоли построителя отчетов(ИР), получается сам очень аккуратный отчет , но сохраняется и читается он в формате *.rcf , каким образом его...

Как открыть отчёт с указанным значением параметра, который используется в запросе на котором строится отчёт?
Есть запрос, по нему построен отчёт: SELECT Товар.Артикул, ., Товар.Наименование, ., ., .Количество, Товар. FROM INNER JOIN ...

Отчет РАУЗ переделать в отчет с партионным учетом
Возможно ли типовой отчет построенный на РАУЗ переделать так, чтобы он работал в партионном учете? Путем удаления ключей аналитики или...

Отчёт о том, кто открывал отчёт
Привет. поставили задачу - узнать кто из пользователей открывал с какими настройками отчёт. есть какие варианты как это сделать ? я...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru