我有一个包含学生信息和学校成绩的数据库。然后,我尝试查询结果集,显示针对我们在学校的不同学生子组的关键绩效指标。最终结果的一个非常粗略的例子是:
示例表我正在尝试创建
请注意,学生群体有重叠
同一位学生可以加入Whole Year
,Females
和Non FSM
等:
现在我已经实现了这个目标。我为每个子组使用了聚合函数和GROUP BY子句,然后使用UNION ALL组合这些查询来创建表。我的代码的一个粗略的例子是:
SELECT 'Whole Year' AS [Group], COUNT(student.name) AS [Total No. of Students]
UNION ALL
SELECT student.gender AS [Group], COUNT(student.name) AS [Total No. of Students]
GROUP BY student.gender
UNION ALL
SELECT student.fsm AS [Group], COUNT(student.name) AS [Total No. of Students]
GROUP BY student.fsm
问题是,我需要为许多关键绩效指标和许多子组执行此操作。使用我目前的解决方案,我的代码是巨大的,也不是很易于管理。
我猜可能有一个更优雅的解决方案,所以如果有人能指出我正确的方向,我将非常感激。
答案 0 :(得分:2)
首先,您需要将分组创建为行。目前,它们是基于列的(它们基于dim redVector as long ' or other appropriate variable type
' ***** code that defines the red vector *****
if range("e5").interior.color = redVector then
' do stuff
end if
中的列值)。因此,使用student
运算符将列转换为行,每个分组包含属于它的所有学生ID。
通过将此映射放入CTE(本质上是临时表),您可以从此加入UNPIVOT
并计算每个分组的KPI:
student
这会导致更少的表扫描和更清晰的SQL。