Sql 交叉表查询以获取基于类别的记录数
今天还有一个问题。MS Access 给定表格: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
表单列表
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,我会得到我想要的所有表单类型,但不是所有位置。现在有一个有趣的第二个空行:)