SQL临时表建立和使用的一个例子
比如表 from1
姓名 语文 数学 英语
张A 82 78 64
孙B 88 90 89
刘A 91 84 73
列出张A 孙B 刘A的科目成绩的最高分
姓名 语文 数学 英语
张A 82 78 64
孙B 88 90 89
刘A 91 84 73
列出张A 孙B 刘A的科目成绩的最高分
DECLARE
@a
TABLE
(姓名
varchar
(
20
), 语文
int
, 数学
int
, 英语
int
)
INSERT @a select ' 张A ' , 82 , 78 , 64
union all select ' 孙B ' , 88 , 90 , 89
union all select ' 刘A ' , 91 , 84 , 73
SELECT 姓名, CASE WHEN 英语 > ( CASE WHEN 语文 > 数学 then 语文 else 数学 end )
THEN 英语
ELSE
CASE WHEN 语文 > 数学 then 语文 else 数学 end
END 成绩
FROM @a
INSERT @a select ' 张A ' , 82 , 78 , 64
union all select ' 孙B ' , 88 , 90 , 89
union all select ' 刘A ' , 91 , 84 , 73
SELECT 姓名, CASE WHEN 英语 > ( CASE WHEN 语文 > 数学 then 语文 else 数学 end )
THEN 英语
ELSE
CASE WHEN 语文 > 数学 then 语文 else 数学 end
END 成绩
FROM @a
--
result
/*
姓名 成绩
-------------------- -----------
张A 82
孙B 90
刘A 91
(所影响的行数为 3 行)
*/
/*
姓名 成绩
-------------------- -----------
张A 82
孙B 90
刘A 91
(所影响的行数为 3 行)
*/
个人意见
DECLARE @a TABLE(姓名 varchar(20), 语文 int, 数学 int, 英语 int)
INSERT @a select '张A', 82, 78, 64
union all select '孙B', 88, 90, 89
union all select '刘A', 91, 84, 73DECLARE @b TABLE(姓名 varchar(20), 学科 varchar(20), 成绩 int)
INSERT @b select 姓名, '语文', 语文 from @a
union all select 姓名, '数学', 数学 from @a
union all select 姓名, '英语', 英语 from @aSELECT 姓名,(select 学科 from @b where 成绩=(select max(成绩) from @b where 姓名=bb.姓名)) as 学科,max(成绩) as 最高成绩
FROM @b as bb group by 姓名 order by 姓名