Войти

Показать полную графическую версию : [решено] MS Access: Сложный перевод строк таблицы в столбики


AlexK_UA
22-02-2012, 14:24
Доброго времени суток, посетители форума !

Для начала общая информация ... У нас компания где ведется учет моряков и пройденных ими курсов(курсы у нас же и проводятся), они получают сертификат, а мы фиксируем это в базу, таким образом - ФИО моряка, еще пару маловажных полей с общими данными и дальше столбики связанные с пройденными им курсами, Номер сертификата, столбик Название курса, дата начала курса, дата окончания, кол-во дней курса, последнее судно на момент прохождения того или иного курса, последнее звание, последний офис. Все это сделано в виде "вертикальной"таблицы, упрощенный вариант представлен ниже, т.е. в реальной таблице примерно 12 столбиков и несколько тысяч строк, при этом ФИО моряка может повторятся в зависимости от пройденных им курсов, исходя из таблицы-примера, Иванов прошел 3 курса и соответственно за ним 3 строки в базе (всего курсов в реальной базе порядка 29-30).


Name CertN LastVessel CourseName
Ivanov od001 Vessel1 Course1
Ivanov od001 Vessel2 Course2
Ivanov od002 Vessel2 Course3
Petrov od002 Vessel3 Course1
Petrov od003 Vessel3 Course2
Petrov od001 Vessel4 Course3
Sidorov od002 Vessel5 Course2
Sidorov od001 Vessel5 Course4


Я только в общих чертах работал в Access, по-этому следующая задача для меня представляется довольно сложной, хотя немного поработал с несложными запросами и имею некоторое представление, а нужно сделать следующее... перевести данную таблицу в такой вид:


Name Course1 LastVesselCourse1 Course2 LastVesselCourse2 Course3 LastVesselCourse3 Course4 LastVesselCourse4
Ivanov od001 Vessel1 od001 Vessel2 od002 Vessel2
Petrov od002 Vessel3 od003 Vessel3 od001 Vessel4
Sidorov od002 Vessel5 od001 Vessel5


Т.е. необходимо перевести таблицу грубо говоря к горизонтальному виду в которой у отдельно взятого моряка будет только 1 строчка в которой будут перечисляться все его курсы, а столбиками станут названия курсов и что самое сложное, в качестве информации в столбике курса будет отображаться номер сертификата при этом у каждого курса будет столбик с информацией по последнему судну, последнему офису, последнему званию, в данном примере я только судно показал для простоты. Так на вскидку должно таким образом получится более 100 столбиков в реальной таблице (29 курсов плюс 3-4 столбика к каждому курсу по данным о последнем судне и т.д. плюс общая информация, неск. столбиков). При этом особенность, номера сертификатов могут повторятся, так как это не абсолютные значения, номера сертификатов присваиваются как-то в зависимости от группы занимающихся.

В общем 2 вопроса:
1. Реально ли такое сделать в принципе ?
2. Если да, то могу ли я рассчитывать на помощь посетителей форума? :)

Iska
22-02-2012, 19:00
AlexK_UA, посмотрите здесь: Make summary data easier to read by using a crosstab query - Access - Office.com (http://office.microsoft.com/en-us/access-help/make-summary-data-easier-to-read-by-using-a-crosstab-query-HA010229577.aspx) и здесь: TRANSFORM Statement (Microsoft Access SQL) [Access 2007 Developer Reference] (http://msdn.microsoft.com/en-us/library/bb208956(v=office.12).aspx).

AlexK_UA
28-02-2012, 11:01
Iska, Спасибо большое, очень помогло, увы из-за относительно большой величины таблицы процесс перевода в нужный вид занимает не мало времени, но по крайней мере решение найдено :)

Iska
28-02-2012, 11:43
AlexK_UA, Вы посмотрите — может быть, Вас устроит и обычный отчёт вида строка-подтаблица-подтаблица, наподобие:
Name CertN LastVessel CourseName
Ivanov od001
Vessel1
Course1
Vessel2
Course2
Course3

?

AlexK_UA
28-02-2012, 14:29
Iska, Нет, увы такое не очень подходит, просто сложность в том, что там надо делать довольно большое кол-во полей из значений и надо чтобы в одной строке был перечень всей информации по одному человеку. К сожалению перекрестный запрос не даёт возможность сделать всю большую таблицу одним махом, я решил просто делать Имя и плюс какое-то поле, потом получаю таблицу, экспортирую её допустим в эксель, затем беру другое поле с именем, опять формирую нужные мне поля при помощи ввода доп поля в исходной таблице с названиями будущих полей в новой таблице и получаю след небольшой перекрестный запрос, его так же экспортирую добавляю к той таблице, так сказать склеиваю и потом в итоге получится общая картинка широченная таблица на 120 где-то полей. В принципе меня это устраивает, главное я знаю что в итоге я сделаю это преобразование таблицы, другое дело, что может быть есть вариант с небольшим упрощением данного процесса, так как строк в таблице тысяча и приходится в этих доп полях вводить тысячу раз вписывать названия будущих полей, чтобы потом при преобразовании правильно отображало поля для нужных людей. Но опять таки результат хоть какой-то есть, если нету способа немного упростить жизнь, не страшно :)

Iska
28-02-2012, 15:55
AlexK_UA, спасибо, ясно.




© OSzone.net 2001-2012