![]() |
|
![]() ![]() ![]() |
|
Nikolja |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 24.2.2009 Где: Черкассы Репутация: -1 Всего: -1 |
Здравствуйте, форумчане и замечательный форум Vingrad!
![]() Здесь, на форуме, есть что почитать, но ПИШУ я сюда редко. (Не писатель, а читатель, однако) ![]() Базы данных – дело для меня то ли новое, то ли хорошо забытое старое. Надеюсь, что для людей, занимающихся этим делом постоянно, ответить на следующий вопрос не составит труда. Есть некий диагностический центр и его база данных. БД – локальная, Парадокс, Delphi. Идентификаторы я напишу по-русски, русскими буквами. Возможно, так скорее и проще будет понятна суть вопроса. Каждый день в диагностический центр обращаются клиенты/пациенты, направленные туда из РАЗНЫХ БОЛЬНИЦ и прочих лечебных заведений. В БД заносится разная информация по каждому клиенту. В том числе и — из какой больницы он направлен. ----------------------------------------------------------------------------- Таблица Основная.db Поля: Фамилия_пациента Имя Отчество Дата_приёма Название_больницы другие, к делу не относящиеся, поля. ----------------------------------------------------------------------------- СУТЬ ДЕЛА: Нужен отчёт, где 1) Список из названий больниц, откуда пришли клиенты 2) Сколько пришло из каждой больницы пациентов за месяц 3) Сколько за каждый из выбранных 4-х месяцев. Например: Название больницы Январь Февраль Март Апрель ----------------------------------------------------------- 1-ая город. больница 5 7 8 3 2-ая город. больница 10 5 7 15 Областная больница 20 12 11 21 и т.п. ---------------------------------------------------------- Как это сделать? С помощью SQL или, может быть, как-нибудь средствами Delphi можно? Допустим, чтобы выбрать данные за 1 месяц, (например, за январь) я написал такой запрос (идентификаторы, для понятности, ЗДЕСЬ на русском):
А как за 4 месяца? и чтобы количество за каждый месяц в отдельной колонке, как в табличке выше? И ЕЩЁ ВОПРОС: Можно ли задать условие так, чтобы задавать в запросе только нужный месяц, а не диапазон с первого по последнее число месяца? Чтобы пользователь не вспоминал, сколько дней в январе, сколько в феврале, а сколько в марте? |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
Какие еще есть таблицы (список пациентов, список больниц и т.д.)?
Насколько я понимаю, для решении данных задач достаточно 3-х таблиц: клиенты, больницы и сводная (типа той, что приведена). Это сообщение отредактировал(а) Keeper89 - 20.6.2010, 21:02 |
|||
|
||||
chip_and_dayl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 603 Регистрация: 22.4.2007 Где: Украина, Киев Репутация: 2 Всего: 9 |
Также как и за 1 месяц ![]()
Можно, на уровне Делфи. Пользователь указывает только месяц, а программа уже с помощью встроенных функций вычисляет количество дней в месяце и передает в скл запрос. Для этого лучше использовать параметри Добавлено через 2 минуты и 31 секунду Да, правда чтобы результат был в виде, что выше нужно подумать Добавлено через 4 минуты и 23 секунды Что за база!?! На сколько я знаю, то есть в скл ф-ции которые отделяют от даты месяц, год и т.д. Тогда можно по им группировать -------------------- Фсё будет хорошо!!! |
|||
|
||||
Nikolja |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 24.2.2009 Где: Черкассы Репутация: -1 Всего: -1 |
Вся основная инфа, как раз в той таблице, под названием ~ Основная.bd. Если угодно -- Osnovna.bd Есть ещё таблица со списком лечебных заведений. Ну а остальное, как я и писал, уж извините, как говорится, не в обиду будь сказано, действительно ничуть не относится к данному вопросу. Списки врачей, лаборантов, израсходованных материалов... Добавлено @ 13:56
А поконкретнее можно, если знаете? Тут ведь, по идее, несколько строчек кода... Я же именно об этом и спрашиваю, -- т.е. понимаю, что это где-то близко к тому, что выше написано -- но не соображу КАК именно! Отвечаю на другие вопросы: Как уже было сказано: БД -- несколько таблиц на Парадоксе, интерфейс -- на Delphi. Это сообщение отредактировал(а) Nikolja - 21.6.2010, 14:02 |
||||
|
|||||
Nikolja |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 24.2.2009 Где: Черкассы Репутация: -1 Всего: -1 |
Опять-таки - а конкретнее? Программирование -- всё-таки более-менее точная техническая наука, хоть и творческая... ![]() В Delphi, к примеру, есть ф-ция DecodeDate(), которая разделяет дату на несколько беззнаковых целых (тип word)... Год, месяц, день... |
|||
|
||||
chip_and_dayl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 603 Регистрация: 22.4.2007 Где: Украина, Киев Репутация: 2 Всего: 9 |
Заставили в гугл лезть.
Такое в Аксесе прокатило. Что с Парадоксом будет я не знаю ![]() Добавлено через 1 минуту и 1 секунду Результат 2007 1258 2008 2589 Вместо Yera используете Month -------------------- Фсё будет хорошо!!! |
|||
|
||||
Nikolja |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 24.2.2009 Где: Черкассы Репутация: -1 Всего: -1 |
To chip_and_dayl
Спасибо за помощь! Натолкнули на поиск в нужном направлении. Плюс вам в репутацию за совет! +1 . Нет... постов у меня маловато на этом форуме, говорит техника... надо больше ста, чтобы влиять на репутацию. Ну, буду должен. Правда, ваш код, тот что выше, в ДАННОМ случае, не работает, но благодаря ему я СУТЬ решения понял. Ответ нашёл в Помощи к Delphi, раздел "Local SQL". Итак, на ОДИН вопрос ответ уже есть. Вот он. Чтобы задавать в запросе только нужный МЕСЯЦ, а не диапазон с первого по последнее число месяца надо использовать функцию EXTRACT(). В данном случае EXTRACT(MONTH ...). Например, выделим из поля с датой (приёма) Data_prijoma год, месяц и день. Это делается так.
А вот так задаётся УСЛОВИЕ - например, выбрать записи, где Дата приёма - май, т.е. 5-ый месяц. (Прим. "Назва лікарні" - укр. "название больницы", а "месяц" и "день" выше я написал на такой югославско-хорватский манер - "mesjac', "denj". Их "j" - это наше "й" или "ь".)
НО! Остаётся ОСНОВНОЙ вопрос! Как изменить тот запрос, что написан выше (последний запрос), чтобы он выводил информацию за несколько месяцев, и за каждый месяц в отдельной колонке? Получается, что к каждому столбику отдельное условие, что ли? Переформулирую запрос попроще, русским языком. Нам надо вывести информацию за 4 месяца (например, январь, февраль, март, апрель), где: 1-ый столбик -- список Названий_больниц (откуда пришли клиенты/пациенты). Это сделать просто -- SELECT Название_больницы. 2-ой столбик -- Кол-во Названий_больниц, ГДЕ Дата_приёма = январь. С этим тоже уже разобрались. Пока непонятно следующее. Как же переписать запрос, чтобы он выводил ещё и такую инф-ию? : 3-ий столбик -- Кол-во Названий_больниц, ГДЕ Дата_приёма = февраль 4-ый столбик -- Кол-во Названий_больниц, ГДЕ Дата_приёма = март 5-ый столбик -- Кол-во Названий_больниц, ГДЕ Дата_приёма = апрель |
||||
|
|||||
chip_and_dayl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 603 Регистрация: 22.4.2007 Где: Украина, Киев Репутация: 2 Всего: 9 |
Почти, но не все в моем примере доглядели
![]()
Начало и конец даты лучше передавать через параметры Результатом по идеи должно быть следующее: Бол. Святая Мария февраль 158 Бол. Святая Мария март 178 Бол. Святой Петр февраль 358 Бол. Святой Петр март 258 Чтобы результат был в том виде, как у вас, то нужно или использовать специальный компонент для отображения таблиц, или думать как это можно реализовать с помощью запроса -------------------- Фсё будет хорошо!!! |
|||
|
||||
Nikolja |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 24.2.2009 Где: Черкассы Репутация: -1 Всего: -1 |
GROUP BY Nazva_likarni, EXTRACT(MONTH FROM Data_prijoma)
такое не работает. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
почему?
|
|||
|
||||
chip_and_dayl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 603 Регистрация: 22.4.2007 Где: Украина, Киев Репутация: 2 Всего: 9 |
Nikolja
Хоть ошибку скажите:) -------------------- Фсё будет хорошо!!! |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Зачем? Он ждёт телепатов!
|
|||
|
||||
chip_and_dayl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 603 Регистрация: 22.4.2007 Где: Украина, Киев Репутация: 2 Всего: 9 |
В принципе я телепатом подрабатываю, но в четверг, а сегодня вторник, так что ждем автора или четверга :)
-------------------- Фсё будет хорошо!!! |
|||
|
||||
Nikolja |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 24.2.2009 Где: Черкассы Репутация: -1 Всего: -1 |
![]() ![]() Я запросы проверяю в SQL Explorer`e. Так ОН говорит что-то в таком роде - не поддерживаются выражения в GROUP BY. Не верите ![]() Можно очень быстро создать такую несложную табличку, как выше. Например, в Database Desktop`e. Там всего-то и надо полей для данной задачи: Название больницы - символьное Дата приёма - дата И несколько записей сочинить, чтобы было из чего выбирать. |
|||
|
||||
Nikolja |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 24.2.2009 Где: Черкассы Репутация: -1 Всего: -1 |
![]() Как говорят французы, пардон. У меня именно сейчас, к сожалению, сложности с доступом к Интернету. Поэтому так выходит, что я пишу коротко и редко. И, хуже того, программа (по которой возникли вопросы) - у меня на одном компе, а в Интернет приходится выходить с другого. 2 chip_and_dayl Спасибо за совет. Это, в принципе, тоже вариант решения.
Увидел ваш совет сразу. И попробовал. НО - такая группировка - сначала по Названию, а потом по Дате, работает, к сожалению, только когда Дата - полная. Может быть, я где-то ошибаюсь, но я попробовал в разных вариациях группировать по выделенному из даты месяцу - не получается! Ничего! Зато я из-за этого запроса основательно SQL вспомнил и повторил! А то, как говорится, волею случая, мне несколько лет ничем связанным с базами данных заниматься не приходилось. А оно забывается. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |