Supposons que j'ai un tableau comme ci-dessous:
Class Student Maths English
------------------------------------
1 a 50 60
1 b - 60
2 c 70 50
2 d 40 -
Et j'ai besoin d'une requête SQL pour produire cet ensemble de résultats:
Score Maths English Total
--------------------------------------
1 50 120 170
2 110 50 160
Grand Total 160 170 330
S'il vous plaît aider.
Réponses:
1 pour la réponse № 1Essaye ça:
SELECT
ISNULL(Class, "Grand Total") as Score,
sum(Maths) as Maths,
sum(English) as English,
sum(Maths) + sum(English) as Total
FROM
table
GROUP BY
ISNULL(Class, "Grand Total")
WITH ROLLUP
Notez que c'est la syntaxe T-SQL, il faudra peut-être un peu de peaufinage pour MySql ou Oracle.
3 pour la réponse № 2
SELECT
Class,
sum(Maths) as Maths,
sum(English) as English,
sum(Maths+English) as Total
FROM
table
Group by
Class with Rollup
2 pour la réponse № 3
J'ai utilisé une union qui n'a pas l'air si élégante
create table the_table
(
class int,
student varchar(5),
maths int,
english int,
)
insert into the_table
values
( 1, "a", 50, 60),
( 1, "b", 0, 60),
( 2, "c", 70, 50),
( 2, "d", 40, 0)
select
[class] = convert(varchar(50),class)
, sum(maths) maths
, sum(english) english
, sum(maths + english) total
from the_table
group by
class
union
select
[class] = "Grand Total"
, sum(maths) maths
, sum(english) english
, sum(maths + english) total
from the_table