Доступ: эффект перекрестного запроса для нечисловых данных

Я использую Access 2007 и мне нужна помощь в создании запроса. Если это безумно длинно, извините! Я полагаю, что чем больше деталей, тем лучше понимание. Я не программист — надеюсь, кто-нибудь поможет.

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

ДАННЫЕ:

  • Badge_code 24 производится в 3 местах: 110, 210 и 320 (представляет Чикаго, Рокфорд и Сент-Луис).
  • Badge_code B9 в 2 местах: 110 и 280 (Чикаго и Пеория)
  • Badge_code C1 в 3 местах: 200 и 210 (Индианаполис и Рокфорд)

Каждая комбинация badge_code-location находится в отдельной строке, всего 8 строк. Количество кодов бейджей может/будет расти.

ЗАПРОС, КОТОРЫЙ Я ПРОБОВАЛ:

Count(tbl_BadgeType.Badge_type_number) AS CountOfBadge_type_number
SELECT tbl_BadgeType.Badge_code
FROM tbl_BadgeType
GROUP BY tbl_BadgeType.Badge_code
PIVOT tbl_BadgeType.Location_production;

Badge_type_number — это первичный ключ, используемый для идентификации каждой комбинации использования кода и местоположения значка.

РЕЗУЛЬТАТ:

Badge Code     110   200   210  280  320
24             1           1         1
B9             1                1    
C1                   1     1         

Заголовки столбцов являются числовыми и не могут быть изменены на имена местоположений в кросс-таблицах, и я хочу «Да» вместо «1». (Очевидно, что они равны 1, потому что это функция подсчета в кросс-таблице, которая мне на самом деле не нужна...)

ЖЕЛАЕМЫЙ РЕЗУЛЬТАТ:

Badge Code     Chicago  Indianapolis   Rockford  Peoria  St. Louis
24             Yes      No             Yes       No      Yes
B9             Yes      No             No        Yes     No
C1             No       Yes            Yes       No      No

ПРОБЛЕМА/ВОПРОСЫ:

  1. Запрос перекрестной таблицы в самом строгом смысле совсем мне не нужен, но я не знаю, как имитировать его эффект "свертывания". Это разница между 6 страницами неизвестности и 1 страницей полезной ясности.
  2. Если кросс-таблица это путь, то я не могу понять, как заставить значения "1" отображаться как "Да". Я использовал операторы IIF в других запросах и отчетах для «перевода» значений 1/0 в «Да/Нет», но не могу понять, куда поместить IIF в этом запросе или его отчете.

Имеет ли это смысл? Я прошу слишком много? Есть ли надежда для меня? :^)


person Community    schedule 30.06.2009    source источник
comment
Не могли бы вы опубликовать пример того, как выглядит tbl_BadgeType с точки зрения структуры, и краткий пример соответствующих данных в нем? Ваша проблема кажется решаемой, но трудно предлагать решения, не зная, как выглядят исходные данные. Спасибо!   -  person anschauung    schedule 01.07.2009
comment
Кроме того: есть ли еще одна таблица, которую можно присоединить к Badge_code, чтобы захватить Чикаго, Иллинойс и т. д.?   -  person anschauung    schedule 01.07.2009


Ответы (2)


Вау! Я не ожидал ответа так скоро.

Вот структура и примеры данных соответствующих полей tbl_BadgeTypes:

Badge_code     Badge_description(both are Text fields)
01             Faculty/staff
04             College of Law
62             Student-Peoria
86             Visitor
B7             Police 

Места, где действительно ИСПОЛЬЗУЕТСЯ код значка, находятся в tbl_TokenInstance (строка для каждого экземпляра токена — значок, идентификатор и т. д. Код значка может использоваться в разных местах; они не являются исключительными. Соответствующие данные:

  Instance_number(autonumber)  Prod_site_num(Integer)   Badge_code(text)
   1                            110                      B7
   3                            110                      B7
   4                            110                      B7
   27                           310                      04
   15                           210                      62
   21                           110                      62
   16                           110                      01
   22                           210                      01
   25                           310                      01
   31                           110                      86
   32                           120                      86

Наконец, исходный список номеров и описаний производственных площадок находится в list_ProductionSite:

  Production_site_number        Production_site_description
  110                           Chicago IDC
  120                           Chicago CS
  210                           Springfield IDC
  310                           Champaign IDC
  320                           Champaign CS
person Community    schedule 13.08.2009

Итак, в ожидании ответов на комментарии, которые я оставил выше, я могу предложить некоторые частичные решения (могут появиться более чистые решения, в зависимости от того, как выглядит ваша таблица):

Проблема 1. Преобразование чисел в текст

Если у вас есть таблица, которая может сопоставлять [Location_production] с такими строками, как «Чикаго», то внутреннее соединение — это все, что вам нужно, чтобы «110» отображалось как «Чикаго». Третья строка запроса, который вы попробовали, превратилась бы в что-то вроде:

FROM tbl_BadgeType AS T INNER JOIN tbl_Locations AS L ON T.Location_production = L.ID 

Затем вы просто проведете перекрестную таблицу по L.LocationName или любому другому фактическому тексту.

Проблема №2: от "1" до "Да"

Вообще говоря, вы можете просто заменить выражение vb iif, чтобы изменить «1» на «Да»

ProducesHere: iif([Badge_type_number]>0, "Yes","No")

Вам нужно будет изменить «Count ()» на «Max ()» или «Min ()» в верхней строке вашего запроса и, возможно, другие изменения, в зависимости от того, как выглядят ваши данные.

person anschauung    schedule 01.07.2009