#ms-access
#ms-access
Вопрос:
У меня есть таблица, которая похожа на тип вопросника.. Моя исходная таблица содержит 450 столбцов и 212 строк. Slno — это идентификатор пользователя, который отвечает на вопрос.
SlNo Q1a Q1b Q2a Q2b Q2c Q2d Q2e Q2f .... Q37c <450 columns>
1 1
2 1 1
3 1
4 1 1
5 1
Я должен выполнить анализ для этих данных, например, количества лиц мужского пола (Q1a) и владельца лодки (Q2b), т.е. (выберите * из вопросника, где Q1a = 1 и Q2b = 1) .. и т.д.. существует еще много комбинаций..
Я разработал в MS access весь дизайн работал идеально, за исключением серьезной проблемы (количество столбцов таблицы ограничено 255).
Чтобы иметь возможность ввести это в таблицу access, я вставил в нее 450 строк и 212 столбцов (теперь я могу ввести это в access db). Теперь при извлечении записей я хочу, чтобы набор записей преобразовывал результаты в нужную мне форму, чтобы мне не приходилось менять свой алгоритм или логику…. Как добиться этого с минимальными изменениями? Я впервые работаю с базой данных Access
Комментарии:
1. Это одноразовый метод или он будет использоваться в будущем? Если последнее, то я бы определенно позаботился о том, чтобы данные собирались в надлежащем формате, чтобы вам не пришлось исправлять это снова.
Ответ №1:
Возможно, вы сможете использовать запрос перекрестной таблицы для генерации того, что вы ожидаете. Вы также могли бы создать функцию транспонирования.
В любом случае, я думаю, вы все равно столкнетесь с ограничением в 255 столбцов, а MS Access использует временную таблицу и т.д.
Однако, я думаю, у вас будет гораздо меньше работы и лучшие результаты, если вы измените структуру своей таблицы.
Я предполагаю, что это похоже на анкету для заполнения, и в основном это множественный выбор. В этом случае вместо записи результата я бы записал ответ на вопрос
SlNo Q1 Q2
1 B
2 B
3 A
4 A C
5 A
Тогда у вас будет гораздо меньше столбцов для работы. И вы запрашиваете, где Q1= ‘A’ вместо Q1a = 1.
Альтернативный вариант — разбить таблицу на разделы (личные, карьерные и т.д.), А затем выполнить объединение и отображать только нужный вам столбец (чтобы не превышать ограничение в 255 столбцов).
Способ сделать это, который обрабатывает больше вопросов, — создать таблицу для пользователя, таблицу для вопроса и таблицу для ответа
Person
SlNo PostalCode
1 90210
2 H0H 0H0
3
Questions
QID, QTitle, QDesc
1 Q1a Gender Male
2 Q1b Gender Female
3 Q2a Boat
4 Q2b Car
Answers
SlNo QID Result
1 2 True
1 3 True
1 4 True
2 1 True
2 3 False
2 4 True
Затем вы можете найти отвечающих на вопросы, выбрав людей из списка ответов
select * from Person
where SlNo in (
select SlNo from Answers, Questions
where
questions.qid = answers=qid
and
qtitle = 'Q1a'
and
answers.result='True')
and SlNo in (
select SlNo from Answers, Questions
where
questions.qid = answers=qid
and
qtitle = 'Q2a'
and
answers.result='True')
Ответ №2:
Я, наконец, получил решения
- Я создал две таблицы, в одной из которых 225 столбцов, а в другой — 225 столбцов (всего 450 столбцов)
-
Я создал инструкцию SQL
select count(*) from T1,T2 WHERE T1.SlNo=T2.SlNo
и добавил условия, которые я хочу
После этого все становится правильным..
База данных была введена ошибочно другими сотрудниками в начале, но просто выбрасывать одну неделю работы было нехорошо, поэтому пришлось придерживаться этого дизайна … и смертельный исход на следующей неделе .. теперь это работает