1

我正在使用 Access 2007,需要帮助来创建查询。如果这太疯狂了,对不起!我认为越详细越好理解。我不是程序员——我希望有人能提供帮助。

我需要知道如何将非数字数据折叠/汇总/汇总到共享特征/值的单行中。我想要的就像一个交叉表查询,因为我想要来自不同行的唯一单元格值旋转/显示在沿一行的列中以获取该共享/公共值。但是,我的数据不是数字,它需要交叉表禁止的字母列标题。

数据:

  • Badge_code 24 在 3 个地点生产:110、210 和 320(代表芝加哥、罗克福德和圣路易斯)
  • 2 个位置的徽章代码 B9:110 和 280(芝加哥和皮奥里亚)
  • 3 个位置的徽章代码 C1: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 放在此查询或其报告中的哪个位置。

这有意义吗?我要求太多了吗?我有希望吗?:^)

4

2 回答 2

1

哇!没想到这么快就有答案。

以下是 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 中(每个令牌实例的一行 - 徽章、ID 等。徽章代码可能被不同的位置使用;它们不是排他性的。相关数据是:

  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
于 2009-08-13T19:28:41.783 回答
0

好的,所以等待对我上面留下的评论的回复,我可以提出一些部分解决方案(可能会产生更清洁的解决方案,具体取决于您的表格的外观):

问题 #1:数字到文本

如果您有一个可以将 [Location_production] 与“Chicago”之类的字符串匹配的表,那么您只需要一个内部连接就可以使“110”显示为“Chicago”。您尝试的查询的第三行将变成如下内容:

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()”,并可能进行其他更改,具体取决于您的数据的外观。

于 2009-07-01T01:33:13.823 回答