Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание отчета [D7, XP]


TimScorp ©   (2006-09-03 10:24:00) 

Доброго времени суток!!!

Вопрос в следующем:

Имеется БД (Access), в ней имеется таблица с полями (Фамилия, Тип, Месяц)

Пример:
Иванов, 1, 9
Петров, 1, 9
Сидоров, 2, 9
Иванов, 2, 9
Иванов, 1, 9
Петров, 3, 9
Петров, 2, 8
Петров, 3, 9

нужно создать отчет за месяц сентябрь (9) и чтобы вывод был вида:

Фамилия          Тип 1        Тип 2        Тип 3
Иванов               2              1              0
Петров               1              0              2
Сидоров             0              1              0

Как найти по месяцу при помощи SQL запроса знаю. А как в получившемся результате объединить одинаковые фамилии???

С уважением TimScorp


TimScorp   (2006-09-04 21:15:00) [1]

Спасибо всем кто пытался помочь.

В Access'е этот запрос выглядит так:

SELECT Fam, (Select count (*) from Dat s1 where s1.Fam = s.Fam and TipD = 0) AS math, (Select count (*) from Dat s2 where s2.fam = s.fam and s2.tipd = 1) AS rus, (select count (*) from Dat s3 where s3.fam = s.fam and s3.tipd = 2) AS lit, (select count (*) from Dat s4 where s4.fam = s.fam and s4.tipd = 3) AS ist
FROM Dat AS s
GROUP BY fam;

ща попробую это в дельфин закинуть. если не получится обращусь.

С уважением TimScorp


sniknik   (2006-09-04 21:12:00) [2]

TRANSFORM Count(*)
SELECT Name AS [Фамилия], Count(*) AS [Всего]
FROM [Таблица]
GROUP BY Fam
PIVOT Choose([Тип], '1-Математика', '2-Русский','3-Литература')


TimScorp   (2006-09-04 17:37:00) [3]

Кол-во предметов фиксированно. Их всего 4.

Приведенная таблица выбрана по месяцу, вот теперь надо это както передать во FreeReport.

Иванов          01/09/2006          1
Иванов          01/09/2006          1
Петров          01/09/2006          1
Иванов          01/09/2006          2
Сидоров        02/09/2006          3
Сидоров        03/09/2006          1
Петров         04/09/2006           3

что бы получилась таблица вида:

Фамилия          Математика            Русский           Литература
Иванов                   2                       1                       0
Петров                   1                       0                       1
Сидоров                 1                       0                       1

Вот как сделать это объединение незнаю.
Кто нить поможет???

С уважением TimScorp.


Anatoly Podgoretsky   (2006-09-04 13:25:00) [4]

Сергей М. ©   (04.09.06 11:42) [8]
Зачем нужна группировка по месяцу, что бы узнать количество записей?
У него четкий кросс-отчет


sniknik   (2006-09-04 12:12:00) [5]

а так это предмет... а считаем количиство этих предметов на человека...
сорри, недопонял.


Сергей М.   (2006-09-04 11:42:00) [6]


> sniknik ©   (04.09.06 11:35) [7]


> в таблице все одно нет признака "предмет" (по чему группировать)


Ну почему же ?
По третьему полю как раз и группировать..
А уж какими средствами и как преобразовать полученный НД в кросс-отчет - это другой вопрос. При этом кросс-отчет может и не понадобиться, если число предметов фиксировано и заранее известно (в дан случае всего 3)


sniknik   (2006-09-04 11:35:00) [7]

а неважно, в таблице все одно нет признака "предмет" (по чему группировать) т.е. из показаной таблици желаемый результат невозможен, а если бы был то в аксес есть специальная каманда переворачивающая результаты групировки TRANSFORM ... PIVOT и ей все одно сколько в результате будет предметов для представления их столбцами.


Сергей М.   (2006-09-04 11:07:00) [8]

Кол-во предметов фиксировано ?


TimScorp   (2006-09-04 10:58:00) [9]

ап


TimScorp   (2006-09-04 07:18:00) [10]

Наверно я неправильно объяснил, попытаюсь по другому.

В таблице имеются поля: Fam (Фамилия), Дата (дд/мм/гггг), Тип (числовое значение равное 1, 2 или 3; при посещении предмета по математики - 1, по русскому - 2, литературе - 3). За один день один человек может посетить несколько предметов, и один и тот же предмет несколько раз.

Данные из таблицы:

Иванов          01/09/2006          1
Иванов          01/09/2006          1
Петров          01/09/2006          1
Иванов          01/09/2006          2
Сидоров        02/09/2006          3
Сидоров        03/09/2006          1
Петров         04/09/2006           3

Необходимо составить отчет сколько раз за месяц сентябрь каждый человек посетил соответствующие придметы чтобы получилась таблица вида:

Фамилия          Математика            Русский           Литература
Иванов                   2                       1                       0
Петров                   1                       0                       1
Сидоров                 1                       0                       1

С уважением TimScorp.


TimScorp   (2006-09-03 21:23:00) [11]

Спасибо

Попробую.

С уважением TimScorp.


zdm   (2006-09-03 16:51:00) [12]

Если пешешь на Delphi,,, FastReport->DBCross


Крокодил Гений   (2006-09-03 12:23:00) [13]

пиши в запросе слово DISTINCT


Наверх

Титульная страница Поиск, карта сайта Написать письмо