我有一个带有数据表的1到N的查找表。
是查找表例如,查找表包含(狗,猫,鸟,异国情调)
数据表包含以下字段。 房子,动物类型,数量
如果我有
等数据house animal_type quantity
1 dog 1
1 cat 1
2 dog 2
3 exotic 1
如何获得将产生以下内容的查询? (列标题的顺序并不重要)。
house dog cat bird exotic
1 1 1 0 0
2 2 0 0 0
3 0 0 0 1
我知道
IIF([animals].[quantity] is null,0,[animals].[quantity])
但是,即使它不在那个房子,也不会为每种动物类型创造零记录。
答案 0 :(得分:4)
您可以通过交叉表查询获得所需内容。请参阅Access帮助主题: TRANSFORM语句(Microsoft Access SQL)。并查看Access 交叉表查询向导以开始使用。
似乎你想要一个 bird 的列,即使没有房子也有。所以将IN ('dog', 'cat', 'bird', 'exotic')
添加到PIVOT
子句:
TRANSFORM Sum(data_table.[quantity]) AS SumOfquantity
SELECT data_table.[house]
FROM data_table
GROUP BY data_table.[house]
PIVOT data_table.[animal_type] IN ('dog', 'cat', 'bird', 'exotic');
如果house
没有animal_type
的记录,则该查询返回Null而不是零。如果您更喜欢零而不是Null,请包含Nz()
:
TRANSFORM Nz(Sum(data_table.[quantity]), 0) AS SumOfquantity
使用该查询,Access 2010会从您的示例数据中为我提供此结果集:
答案 1 :(得分:1)
您可以在MS Access中使用TRANSFORM
运算符来解决您的任务。
TRANSFORM Nz(SUM(quantity), 0)
SELECT house FROM Test
GROUP BY house
PIVOT animal_type
此查询的输出
您可以在此处找到有关它的更多信息(https://msdn.microsoft.com/en-us/library/bb208956(v=office.12).aspx)
答案 2 :(得分:0)
以下链接逐步说明即使没有该标题的关联数据,也可以使用交叉表查询显示动态标题。