Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] MS Access: Сложный перевод строк таблицы в столбики (http://forum.oszone.net/showthread.php?t=228518)

AlexK_UA 22-02-2012 14:24 1864360

MS Access: Сложный перевод строк таблицы в столбики
 
Доброго времени суток, посетители форума !

Для начала общая информация ... У нас компания где ведется учет моряков и пройденных ими курсов(курсы у нас же и проводятся), они получают сертификат, а мы фиксируем это в базу, таким образом - ФИО моряка, еще пару маловажных полей с общими данными и дальше столбики связанные с пройденными им курсами, Номер сертификата, столбик Название курса, дата начала курса, дата окончания, кол-во дней курса, последнее судно на момент прохождения того или иного курса, последнее звание, последний офис. Все это сделано в виде "вертикальной"таблицы, упрощенный вариант представлен ниже, т.е. в реальной таблице примерно 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 1864546

AlexK_UA, посмотрите здесь: Make summary data easier to read by using a crosstab query - Access - Office.com и здесь: TRANSFORM Statement (Microsoft Access SQL) [Access 2007 Developer Reference].

AlexK_UA 28-02-2012 11:01 1868228

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

Iska 28-02-2012 11:43 1868266

AlexK_UA, Вы посмотрите — может быть, Вас устроит и обычный отчёт вида строка-подтаблица-подтаблица, наподобие:
Код:

Name        CertN        LastVessel        CourseName
Ivanov        od001
                        Vessel1
                                Course1
                        Vessel2
                                Course2
                                Course3

?

AlexK_UA 28-02-2012 14:29 1868385

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

Iska 28-02-2012 15:55 1868436

AlexK_UA, спасибо, ясно.


Время: 17:54.

Время: 17:54.
© OSzone.net 2001-