访问:非交叉数据的“交叉表”查询效果

时间:2009-06-30 23:17:11

标签: ms-access ms-access-2007 crosstab

我正在使用Access 2007,需要帮助创建查询。如果这很疯狂,抱歉!我认为更多的细节更好理解。我不是程序员 - 我希望有人会帮助。

我需要知道如何将非数字数据折叠/汇总/汇总到一个共享特征/值的行中。我想要的是喜欢交叉表查询,因为我希望来自不同行的唯一单元格值在该行的共享/公共值的一行中以透视/显示方式显示。但是,我的数据不是数字,它需要alpha列标题,交叉表禁止使用。

数据:

  • 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放在此查询或其报告中的位置。
  3. 这有意义吗?我问得太多了吗?对我有希望吗? :^)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

好的,对我上面留下的评论的待定回复,我可以建议一些部分解决方案(可能会产生更清晰的解决方案,具体取决于你的表格):

问题#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”更改为“是”s

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

您需要在查询的第一行中将“Count()”更改为“Max()”或“Min()”以及可能的其他更改,具体取决于您的数据。