Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2017, 12:30   #1
ariman_
Новичок
Джуниор
 
Регистрация: 12.05.2017
Сообщений: 6
По умолчанию Сформировать отчет из таблицы БД

Требуется решить задачу. У самого мозги не доходят...
Имеется таблица, содержащая записи приема посетителей. Необходимо сформировать отчет на определенную дату в следующем формате:
_________________Решено|Меры приняты|Разъяснено|Отказано|Принято к
Тема обращения_1|
Тема обращения_2|
.
.
Тема обращения_N|

Вот что содержит SQL запрос к таблице(как пример):
Тема обращения_1|Решено
Тема обращения_3|Меры приняты
Тема обращения_2|Разъяснено
Тема обращения_1|Отказано
...И вот эти результаты запроса необходимо представить в следующем виде:
_________________Решено|Меры приняты|Разъяснено|Отказано|Принято к
Тема обращения_1|___1___________________ ___________1
Тема обращения_2|_______________________ __1
Тема обращения_3|_____________1
.
.
Тема обращения_N|

Последний раз редактировалось ariman_; 12.05.2017 в 13:01.
ariman_ вне форума Ответить с цитированием
Старый 12.05.2017, 12:44   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Запросом выбираешь нужную информацию, им же сортируешь и любой генератор отчетов или в excel
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.05.2017, 12:52   #3
ariman_
Новичок
Джуниор
 
Регистрация: 12.05.2017
Сообщений: 6
По умолчанию

Запрос как раз и содержит данные, которые необходимо представить в указанном выше виде
ariman_ вне форума Ответить с цитированием
Старый 12.05.2017, 12:57   #4
ariman_
Новичок
Джуниор
 
Регистрация: 12.05.2017
Сообщений: 6
По умолчанию

Вот что содержит SQL запрос к таблице:
Тема обращения_1|Решено
Тема обращения_3|Меры приняты
Тема обращения_2|Разъяснено
Тема обращения_1|Отказано
...И вот эти результаты запроса необходимо представить в следующем виде:
_________________Решено|Меры приняты|Разъяснено|Отказано|Принято к
Тема обращения_1|
Тема обращения_2|
.
.
Тема обращения_N|
ariman_ вне форума Ответить с цитированием
Старый 12.05.2017, 13:02   #5
ariman_
Новичок
Джуниор
 
Регистрация: 12.05.2017
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Запросом выбираешь нужную информацию, им же сортируешь и любой генератор отчетов или в excel
Подскажите на примере Буду оч благодарен
ariman_ вне форума Ответить с цитированием
Старый 12.05.2017, 13:24   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

похоже, что Вам нужно кросс-таблицу получить.
в некоторых системах генерации отчёта (например, в FastReport) существуют специальные возможности для получения таких отчётов.

но такой отчёт можно получить и "ручками".
например, если число этих ваших "Решено|Меры приняты|Разъяснено|Отказано|Принято к" строго ограничено, то попробуйте отчёт такого вида:
Код:
select Тема_обращения, 
  sum( case when РезультатРешения = 'Решено' then 1 else 0 end) as "Решено",
  sum( case when РезультатРешения = 'Меры приняты' then 1 else 0 end) as "Меры приняты",
  sum( case when РезультатРешения = 'Разъяснено' then 1 else 0 end) as "Разъяснено",
  sum( case when РезультатРешения = 'Отказано' then 1 else 0 end) as "Отказано",
  sum( case when РезультатРешения = 'Принято к' then 1 else 0 end) as "Принято к"
from ВашаТаблица
group by Тема_обращения
order by Тема_обращения
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.05.2017, 13:25   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Типа такого или pivot если поддерживается
Код:
SELECT тема,
    SUM(CASE действие WHEN 'решено' THEN 1 ELSE 0 END) AS решено,
    SUM(CASE действие WHEN 'отказано' THEN 1 ELSE 0 END) AS отказано,
    и д.д.
  FROM МояТаблица
  GROUP BY тема
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.05.2017, 13:42   #8
ariman_
Новичок
Джуниор
 
Регистрация: 12.05.2017
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
похоже, что Вам нужно кросс-таблицу получить.
в некоторых системах генерации отчёта (например, в FastReport) существуют специальные возможности для получения таких отчётов.

но такой отчёт можно получить и "ручками".
например, если число этих ваших "Решено|Меры приняты|Разъяснено|Отказано|Принято к" строго ограничено, то попробуйте отчёт такого вида:
Код:
select Тема_обращения, 
  sum( case when РезультатРешения = 'Решено' then 1 else 0 end) as "Решено",
  sum( case when РезультатРешения = 'Меры приняты' then 1 else 0 end) as "Меры приняты",
  sum( case when РезультатРешения = 'Разъяснено' then 1 else 0 end) as "Разъяснено",
  sum( case when РезультатРешения = 'Отказано' then 1 else 0 end) as "Отказано",
  sum( case when РезультатРешения = 'Принято к' then 1 else 0 end) as "Принято к"
from ВашаТаблица
group by Тема_обращения
order by Тема_обращения
Выдает ошибку Token unknown - line 2, char 11 when
ariman_ вне форума Ответить с цитированием
Старый 12.05.2017, 13:46   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от ariman_ Посмотреть сообщение
Выдает ошибку Token unknown - line 2, char 11 when
плохо. сочувствую.

ну тогда:
1) укажите, какая у Вас СУБД
2) укажите структуру таблицы
3) приведите полностью текст запроса, который Вы пытаетесь выполнить
4) Вы пробовали запрос, который предложил уважаемый коллега Аватар в пост #7 ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.05.2017, 14:01   #10
ariman_
Новичок
Джуниор
 
Регистрация: 12.05.2017
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
плохо. сочувствую.

ну тогда:
1) укажите, какая у Вас СУБД
2) укажите структуру таблицы
3) приведите полностью текст запроса, который Вы пытаетесь выполнить
4) Вы пробовали запрос, который предложил уважаемый коллега Аватар в пост #7 ?
1. СУБД Interbase
2. CREATE TABLE "TARECEPTION"
(
"RECEPTION_NUMBER" INTEGER NOT NULL,
"RECEPTION_STARTR" TIMESTAMP NOT NULL,
"RECEPTION_NUMBAG" INTEGER,
"RECEPTION_GRWKNUMB" INTEGER,
"RECEPTION_GRNAME" VARCHAR(77) CHARACTER SET WIN1251,
"RECEPTION_VZVANNUMB" INTEGER,
"RECEPTION_VZNAME" VARCHAR(77) CHARACTER SET WIN1251,
"RECEPTION_FIO" VARCHAR(99) CHARACTER SET WIN1251 NOT NULL,
"RECEPTION_IND" INTEGER,
"RECEPTION_GOROD" VARCHAR(33) CHARACTER SET WIN1251,
"RECEPTION_UL" VARCHAR(77) CHARACTER SET WIN1251,
"RECEPTION_DOM" VARCHAR(9) CHARACTER SET WIN1251,
"RECEPTION_KORP" VARCHAR(9) CHARACTER SET WIN1251,
"RECEPTION_KV" VARCHAR(9) CHARACTER SET WIN1251,
"RECEPTION_TEL" VARCHAR(21) CHARACTER SET WIN1251,
"RECEPTION_STATUSOBR" VARCHAR(77) CHARACTER SET WIN1251 NOT NULL,
"RECEPTION_SOLUTION" VARCHAR(77) CHARACTER SET WIN1251,
"RECEPTION_OTVOTD" VARCHAR(77) CHARACTER SET WIN1251 NOT NULL,
"RECEPTION_OTVFIO" VARCHAR(77) CHARACTER SET WIN1251 NOT NULL,
"RECEPTION_ENDR" TIMESTAMP,
"RECEPTION_MSG" VARCHAR(33) CHARACTER SET WIN1251,
"RECEPTION_TIPOBR" VARCHAR(33) CHARACTER SET WIN1251,
PRIMARY KEY ("RECEPTION_NUMBER")
);

3. select RECEPTION_STATUSOBR,
sum( case WHEN RECEPTION_SOLUTION = 'Решено положительно' then 1 else 0 end) as "Решено",
sum( case when RECEPTION_SOLUTION = 'Меры приняты' then 1 else 0 end) as "Меры приняты",
sum( case when RECEPTION_SOLUTION = 'Разъяснено' then 1 else 0 end) as "Разъяснено",
sum( case when RECEPTION_SOLUTION = 'Отказано в удовлетворении' then 1 else 0 end) as "Отказано",
sum( case when RECEPTION_SOLUTION = 'Принято на рассмотрение' then 1 else 0 end) as "Принято"
from TARECEPTION
group by RECEPTION_STATUSOBR
order by RECEPTION_STATUSOBR
4. Пробовал запрос, который предложил Аватар
Ошибка: Token unknown - line 2, char 11 RECEPTION_SOLUTION
ariman_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отчет в виде таблицы tuipik Microsoft Office Access 0 02.09.2015 22:07
[RAD STUDIO XE 2]Сформировать отчет.(Fast Report, c++) Multiman Помощь студентам 0 16.04.2012 15:59
Создать отчет на основе существующей таблицы RGZZ Microsoft Office Excel 2 28.07.2011 19:07
FastReport. Сформировать отчет с заданной страницы ivc61 Общие вопросы Delphi 2 19.01.2011 19:32
отчет из таблицы v-anatolik-s Microsoft Office Excel 21 10.10.2008 12:04