我目前正在开展一个项目,确定岛上50个地点的入侵植物物种。在任何地点都可能发生500多种物种,而且许多地点拥有100种或更多相同物种。我需要列出每个站点发生的所有物种,我认为每个站点都有一个单独的表是非常低效的,因为大多数站点都有许多相同的物种。因此,我创建了一个表,其中包含为第一列中的所有站点标识的所有物种,所有站点都作为列名称,以及具有二进制数据的表的主体; “Y”或“N”表示在相应位点是否鉴定了物种。例如:
Scientific Name Old Wives Beach Dadi Orote N Airstrip
Abelmoschus moschatus N N N
Abrus precatorius Y N Y
Abutilon indicum N N N
我无法弄清楚是在Access中的报表中显示这些数据的有效方法。问题是此表中有意义的数据实际上是列名,而不是Access从中创建报表的表的一部分。有没有办法在Access中的报告中列出每个记录(站点)的列名(物种),其中有“Y”?
答案 0 :(得分:1)
您需要规范化数据。正如您所见,将网站存储为列将会出现问题。 为物种创建一个表格:
Id
ScientificName
other data
其他网站表:
Id
Name
与上表相关的第3个表:SpeciesInSites
SpecieId
SiteId
AnyOtherUsefulData
使用此数据结构,您将能够获取报告,摘要等。此外,如果您需要将网站报告为列,则可以使用pivot query或pivot table。< / p>
答案 1 :(得分:0)
可能有一个更优雅的解决方案,但这就是我想要的。这仅适用于您尝试为单个站点运行报告的情况。如果您想要一个50页的报告,每个网站都在一个单独的页面上,这将无法正常工作。
创建一个表单,其中站点作为用户选择的下拉列表,以及用于打开报表的启动按钮。然后使用此算法启动报告:
sub ReportMakerclick()
sitename = combobox.value
sql =&#34;从YourTable WHERE&#34;选择FirstColumn &安培; sitename&amp; &#34; =&#34;&#34; Y&#34;&#34; &#34;
将Report的记录源更新为sql
启动报告
结束子