有一個課程表subject表

還有一個學生成績表achievement 學生表 的 sub_id 中對應 課程表subject中的 id

現在 要將 課程名subName 中的 實心球 跳遠 跳繩 展示成 三列 并且取 學生成績表achievement 中各個科目最高的成績 怎么展示
uj5u.com熱心網友回復:
學生成績表achievement 中的 fraction 是分數uj5u.com熱心網友回復:
行轉列操作。uj5u.com熱心網友回復:
實心球 跳遠 跳繩 展示成 三列 ? 這三個設成 列名, 然后對應的最大分數 是列值 是吧?uj5u.com熱心網友回復:
SELECT
s.subName 科目,
( SELECT MAX( fraction ) FROM achievement WHERE sub_id = s.id ) 最高成績
FROM
SUBJECT AS s;
uj5u.com熱心網友回復:
mysql> use test;mysql> create table subject(id int,subname varchar(20));
mysql> insert into subject values(1,'跳繩'),(2,'實心球'),(3,'跳遠');
mysql> create table archivement(id int,number int,studentid int,sub_id int,fraction int);
insert into archivement values(1,1001,1,1,50);
insert into archivement values(2,1002,1,1,60);
insert into archivement values(3,1003,1,1,60);
insert into archivement values(4,1004,1,2,10);
insert into archivement values(5,1002,1,2,40);
insert into archivement values(6,1002,1,2,55);
insert into archivement values(7,1002,1,3,99);
insert into archivement values(8,1002,1,3,79);
insert into archivement values(9,1002,1,3,70);
select bb.studentid,max(case bb.subname when '跳繩' then bb.fs end) as'跳繩',
max(case bb.subname when '實心球' then bb.fs end) as '實心球',
max(case bb.subname when '跳遠' then bb.fs end) as '跳遠'
from (
SELECT
b.studentid,
-- b.sub_id,
a.subname,
max(b.fraction ) fs
FROM
archivement b,
SUBJECT a
WHERE
a.id = b.sub_id
GROUP BY
b.studentid,
b.sub_id
) bb
group by bb.studentid
uj5u.com熱心網友回復:
之前用潤乾集算器寫SPL陳述句做過列轉行,你可以試試,使用挺簡單的。轉換前:

轉換后:

網格陳述句大概是這樣寫的:
A1:=file("E:/test.xlsx").xlsimport@t()
A2:=A1.pivot(CLASS,STUDENTID;SUBJECT,SCORE;"English":"ENGLISH","Math","PE")
uj5u.com熱心網友回復:
這種需求你應該用程式分步實作轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/76749.html
標籤:MySQL
