![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание отчета [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