MS Access 2007 Строки в столбцы в наборе записей

#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:

Я, наконец, получил решения

  1. Я создал две таблицы, в одной из которых 225 столбцов, а в другой — 225 столбцов (всего 450 столбцов)
  2. Я создал инструкцию SQL

      select count(*) from T1,T2 WHERE T1.SlNo=T2.SlNo
      

    и добавил условия, которые я хочу

После этого все становится правильным..

База данных была введена ошибочно другими сотрудниками в начале, но просто выбрасывать одну неделю работы было нехорошо, поэтому пришлось придерживаться этого дизайна … и смертельный исход на следующей неделе .. теперь это работает 🙂 🙂