强制查询为查找表中的每个值生成记录

时间:2016-01-12 16:31:48

标签: sql ms-access ms-access-2010

我有一个带有数据表的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])

但是,即使它不在那个房子,也不会为每种动物类型创造零记录。

3 个答案:

答案 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会从您的示例数据中为我提供此结果集:

_NDFrameIndexer

答案 1 :(得分:1)

您可以在MS Access中使用TRANSFORM运算符来解决您的任务。

TRANSFORM Nz(SUM(quantity), 0)
SELECT house  FROM Test
GROUP BY house
PIVOT animal_type

此查询的输出

enter image description here

您可以在此处找到有关它的更多信息(https://msdn.microsoft.com/en-us/library/bb208956(v=office.12).aspx

答案 2 :(得分:0)

以下链接逐步说明即使没有该标题的关联数据,也可以使用交叉表查询显示动态标题。

How to Tame the Crosstab Missing Column Beast