2013-03-19 49 views
0

今天的另一个问题。 MS Access。交叉表查询获取基于类别的记录数

给出表:
FormsList

FormID LocationID FormTypeID FormDate 
1 001 001 21.11.2012 
2 002 002 20.11.2012 
3 001 003 16.11.2012 
4 001 001 13.12.2012 
4 003 004 13.12.2012 

...
LocationsList

LocationID LocationName 
001 FirstLocation 
002 SecondLocation 
003 ThirdLocation 
004 FourthLocation 
... 

FormTypes

FormTypeID FormType 
001 "C" 
002 "R" 
003 "F" 
004 "X" 
... 

我需要一个交叉表查询,或收获的人其中有一个表:

  • 第1个栏标题:LocationID
  • 第2,3,4列等标题:“C”,“R”,“F”,“X”。
  • 列1 - 所有从LocationsList
  • 柱LocationsID 2,3,4,5-等 - 的每个位置

查询/ s的应该显示上面表中的以下结果对应的形式数:

LocationID "C" "R" "F" "X" 
001 2 0 0 0 
002 0 1 0 0 
003 0 0 0 1 
004 0 0 0 0 

谢谢。

回答

1

您应该可以使用以下方法来转换数据:

TRANSFORM Count(FormsList.FormTypeID) 
select LocationsList.LocationId 
from (LocationsList 
inner join FormsList 
    on LocationsList.LocationId = FormsList.LocationId) 
inner join FormTypes 
    on FormsList.FormTypeId = FormTypes.FormTypeId 
GROUP BY LocationsList.LocationId 
PIVOT FormTypes.FormType 

编辑,如果你需要的所有位置,那么你将要使用LEFT JOIN

TRANSFORM Count(FormsList.FormTypeID) 
select LocationsList.LocationId 
from (LocationsList 
left join FormsList 
    on LocationsList.LocationId = FormsList.LocationId) 
left join FormTypes 
    on FormsList.FormTypeId = FormTypes.FormTypeId 
GROUP BY LocationsList.LocationId 
PIVOT FormTypes.FormType 
+0

天才要比.. 。谢谢:D 对于一个奖励:即使没有表格记录在那个位置(从004的情况下的结果表格) 和列中的所有表格类型,即使没有记录表格键入(从上面的结果表中选择他是“F”的情况)。 另外,我想看到0的? ** nz(Count(FormsList.FormTypeID),0)**? – 2013-03-19 12:41:12

+1

@AlinI如果你想看到所有的位置,那么你将使用'LEFT JOIN',看看我的编辑 – Taryn 2013-03-19 12:49:50

+0

好了,做到了,现在我得到一个有趣的空第二列,标题为“<>”。第二个想法是 – 2013-03-19 12:57:34