在 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'));
但是,我仍然面临一些问题。,
- 是否可以在使用 PIVOT 时获得总和(分数)。
- 并且在两个(案例,枢轴)中都没有提及每个主题(当我们知道主题是什么时)并获得具有相应标记的主题。,?
我有一个 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'));
但是,我仍然面临一些问题。,
- 是否可以在使用 PIVOT 时获得总和(分数)。
- 并且在两个(案例,枢轴)中都没有提及每个主题(当我们知道主题是什么时)并获得具有相应标记的主题。,?