转置以对Access SQL上的布尔值列进行计数

转置以对Access SQL上的布尔值列进行计数,sql,ms-access,count,boolean,transpose,Sql,Ms Access,Count,Boolean,Transpose,好的,我有一个学生表,有6个字段,(StudentID,HasBambol,HasFlower,HasAloe,HasFern,HasCactus)“HasPlant”字段是布尔值,所以1表示有植物,0表示没有植物 我想找出一个学生拥有的植物的平均数量。桌子上有数百名学生。我知道这可能涉及到某种形式的转置,当然还有计算布尔值并得到平均值。我确实看了这个问题,想了解有关转置的信息(以前从未做过),但我认为可能会有太多的专栏 我的第一个想法是使用for循环,但我不确定它们是否存在于Access中的S

好的,我有一个学生表,有6个字段,(StudentID,HasBambol,HasFlower,HasAloe,HasFern,HasCactus)“HasPlant”字段是布尔值,所以1表示有植物,0表示没有植物

我想找出一个学生拥有的植物的平均数量。桌子上有数百名学生。我知道这可能涉及到某种形式的转置,当然还有计算布尔值并得到平均值。我确实看了这个问题,想了解有关转置的信息(以前从未做过),但我认为可能会有太多的专栏

我的第一个想法是使用for循环,但我不确定它们是否存在于Access中的SQL中。可能是SELECT/FROM/WHERE/IN类型结构


如果您能提供一些逻辑提示和一些可能的阅读材料,我们将不胜感激

您只需获得每个类别的个人总数:

SELECT COUNT(*) FROM STUDENTS WHERE HasBamboo
把它们加起来,除以

SELECT COUNT(*) FROM STUDENTS
但这不是一个很好的数据库设计。。。更好的标准化是:

Table Students; fields StudentID, StudentName
Table Plants; fields PlantID, PlantName
Table OwnedPlants; fields StudentID,PlantID

最后一个表存储拥有特定工厂的每个学生的记录;但您可以轻松地在正确的位置添加不同的信息(学生公寓号;植物拉丁名;OwnedPlants日期),而无需完全重新设计表结构和添加大量字段。(DataquiredBambol、DateAquiredFlower等)

哦,你的平均植物问题可以通过拥有植物总数除以学生总数来解决……谢谢!最后,我列出了一长串左连接,以获取总计数,然后才停止。我会仔细研究你的解决方案。我同意这个设计不是很漂亮,也不是很好,哈哈。