Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 交叉表查询以获取基于类别的记录数_Sql_Ms Access - Fatal编程技术网

Sql 交叉表查询以获取基于类别的记录数

Sql 交叉表查询以获取基于类别的记录数,sql,ms-access,Sql,Ms Access,今天还有一个问题。MS Access 给定表格: 表单列表 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 LocationID LocationName 001 FirstLocation 002 SecondLocation

今天还有一个问题。MS Access

给定表格:
表单列表

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  
LocationID LocationName  
001 FirstLocation  
002 SecondLocation  
003 ThirdLocation  
004 FourthLocation  
...  
FormTypeID FormType  
001 "C"  
002 "R"  
003 "F"  
004 "X"  
...  

位置列表

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  
LocationID LocationName  
001 FirstLocation  
002 SecondLocation  
003 ThirdLocation  
004 FourthLocation  
...  
FormTypeID FormType  
001 "C"  
002 "R"  
003 "F"  
004 "X"  
...  
表单类型

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  
LocationID LocationName  
001 FirstLocation  
002 SecondLocation  
003 ThirdLocation  
004 FourthLocation  
...  
FormTypeID FormType  
001 "C"  
002 "R"  
003 "F"  
004 "X"  
...  
我需要一个交叉表查询,或者一些东西来获取一个表,该表具有:

  • 第1列标题:
    LocationID
  • 第2、3、4栏等标题:“C”、“R”、“F”、“X”
  • 第1列-位置列表中的所有位置SID
  • 第2、3、4、5栏等-每个位置对应表格的编号
查询应显示上述表格的以下结果:

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  

谢谢。

您应该能够使用以下方法转换数据:

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
编辑,如果需要所有位置,则需要使用
左连接

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

亲切的。。。谢谢:D作为奖励:我需要第一列中的所有位置,即使没有记录该位置的表格(从004案例的结果表)和列中的所有表格类型,即使没有记录该类型的表格(从“F”案例的结果表)。还有,我想看看0?nz(Count(FormsList.FormTypeID),0)?@AlinI如果您想查看所有位置,那么您将使用
左连接
,查看我的editOK,这样做了,现在我得到了一个有趣的空的第二列,带有标题“”。再想想,没问题,我将使用与FormTypes number相同的列数进行另一次查询,并使用交叉表查询中的数据(也许这很难看,但很简单)。谢谢蓝脚。PS:如果我使用RIGHT JOIN,我会得到我想要的所有表单类型,但不是所有位置。现在有一个有趣的第二个空行:)