读书人

求select 语句.成绩表.解决思路

发布时间: 2012-02-17 17:50:42 作者: rapoo

求select 语句...成绩表...
/*原表*/

M_ID 语文成绩 英语成绩 数学成绩 物理成绩 化学成绩
--------------------------------
1001 30 78 77 68 65
1002 69 54 65 59 69
1003 80 20 63 81 76
1004 92 45 59 61 60
1005 30 20 16 42 60
1006 45 78 70 64 44
1007 78 65 98 85 89
1008 85 99 100 39 95
1009 63 75 85 69 93
--==========================================================
/*要得到的表*/

M_ID 科目 最低成绩
----------------------
1001 语文成绩 30
1005 语文成绩 30
1003 英语成绩 20
1005 数学成绩 16


1008 物理成绩 39
1006 化学成绩 44

/* "科目 ", "最低成绩 ",为新生成字段*/
/*列变行生成新表*/
有个存储过程最好...


谢谢


[解决办法]
CREATE TABLE T

(M_ID varchar(12), 文成 INT, 英成 INT, 成 INT,物理成 INT,化成 INT)
insert into t

select '1001 ', 30, 78, 77, 68, 65 union all
select '1002 ', 69, 54, 65, 59, 69 union all
select '1003 ', 80, 20, 63, 81, 76 union all
select '1004 ', 92, 45, 59, 61, 60 union all
select '1005 ', 30, 20, 16, 42, 60 union all
select '1006 ', 45, 78, 70, 64, 44 union all
select '1007 ', 78, 65, 98, 85, 89 union all
select '1008 ', 85, 99, 100, 39, 95 union all
select '1009 ', 63 , 75, 85 , 69, 93

select * from
(
select M_ID, '文成 'AS 科目,最低分=(select min(文成) from t )from t WHERE 文成=(select min(文成) from t)
UNION
select M_ID, '英成 'AS 科目,最低分=(select min(英成) from t )from t WHERE 英成=(select min(英成) from t)
UNION
select M_ID, '成 'AS 科目,最低分=(select min(成) from t )from t WHERE 成=(select min(成) from t)
UNION
select M_ID, '物理成 'AS 科目,最低分=(select min(物理成) from t )from t WHERE 物理成=(select min(物理成) from t)
UNION
select M_ID, '化成 'AS 科目,最低分=(select min(化成) from t )from t WHERE 化成=(select min(化成) from t)
)a


M_ID 科目 最低分
------------ -------- -----------
1001 文成 30
1003 英成 20
1005 英成 20
1005 文成 30
1005 成 16
1006 化成 44
1008 物理成 39

(7 row(s) affected)

读书人网 >SQL Server

热点推荐