在Access SQL上转置为计算布尔值的列

时间:2015-12-10 14:17:43

标签: sql ms-access count boolean transpose

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

我想找一个学生的平均植物数量。桌子上有数百名学生。我知道这可能涉及某种转换,当然还要计算布尔值并获得平均值。我确实看过这个问题SQL to transpose row pairs to columns in MS ACCESS database有关转置的信息(以前从未做过),但我认为可能会有太多列。

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

对于逻辑和一些可能的阅读材料的提示将不胜感激。

1 个答案:

答案 0 :(得分:0)

你可以获得每个类别的个人总数:

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),而无需完全重新设计表格结构并添加大量字段。 (DatAquiredBamboo,DateAquiredFlower等)