在 Oracle 中使用查询进行非规范化

Denormalizing using query in Oracle

我有一个 table 这样的:

STU_NAME  SUBJECT   MARKS
--------- --------- ------
1         ENGLISH   90
1         TAMIL     80 
1         MATHS     70 
2         MATHS     70
2         TAMIL     80
2         ENGLISH   95 

结果应该如下所示:

STU_NAME  MATHS_MARK  ENGLISH_MARK TAMIL_MARK  TOTAL_MARKS
--------- ----------- ------------ ----------- -------------
1            70            90            80            240
2            70            95            80            245

我们可以通过查询来实现吗?

我发现最简单的方法是使用条件聚合:

select stu_name,
       max(case when subject = 'MATHS' then Marks end) as Maths,
       max(case when subject = 'ENGLISH' then Marks end) as English,
       max(case when subject = 'TAMIL' then Marks end) as Tamil,
       sum(Marks) as Total
from t
group by stu_name;

我使用 PIVOT 函数得到了相同的结果。,

SELECT *
FROM   (SELECT *
        FROM   x)
PIVOT  (MAX(marks)  FOR (SUBJECT) IN ('ENGLISH', 'MATHS', 'TAMIL'));

但是,我仍然面临一些问题。,

  1. 是否可以在使用 PIVOT 时获得总和(分数)。
  2. 并且在两个(案例,枢轴)中都没有提及每个主题(当我们知道主题是什么时)并获得具有相应标记的主题。,?