假设有张学生成绩表(Stu)如下
Name Subject Result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82想变成
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82如何写查询语句,在线等待高手的回复!
Name Subject Result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82想变成
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82如何写查询语句,在线等待高手的回复!
SqlConnection MyCon = new SqlConnection(ConfigurationSettings.AppSettings["con"]);
SqlCommand MyCmd = new SqlCommand(MySqlStr,MyCon);
MyCon.Open();
try
{
SqlDataReader MyReader;
MyReader=MyCmd.ExecuteReader();
if(MyReader.Read())如果可以使用游标,该如何写上面的MySqlStr语句呀?
INSERT INTO @DATA VALUES ('张三', '数学', '90')
INSERT INTO @DATA VALUES ('张三', '物理', '85')
INSERT INTO @DATA VALUES ('李四', '语文', '85')
INSERT INTO @DATA VALUES ('李四', '数学', '92')
INSERT INTO @DATA VALUES ('李四', '物理', '82')SELECT YW.NAME, YW.Result AS YW, SX.Result AS SX, WL.Result AS WL FROM
(SELECT * FROM @DATA WHERE Subject = '语文') AS YW
INNER JOIN
(SELECT * FROM @DATA WHERE Subject = '数学') AS SX
INNER JOIN
(SELECT * FROM @DATA WHERE Subject = '物理') AS WL
ON SX.NAME = WL.NAME
ON YW.NAME = SX.NAME/*
RESULT:
张三 80 90 85
李四 85 92 82
*/
语文=max((case Subject when '语文' then Result else '' end)),
数学=max((case Subject when '数学' then Result else '' end)),
物理=max((case Subject when '物理' then Result else '' end)),
from Stu
group by Name
select distinct Name,
语文=max((case Subject when '语文' then Result else '' end)),
数学=max((case Subject when '数学' then Result else '' end)),
物理=max((case Subject when '物理' then Result else '' end))
from Stu
group by Name
(select result from s where stu.Name = s.Name and Subject = '语文' ) 语文,
select result from s where stu.Name = s.Name and Subject = '数学' ) 数学 ,
(select result from swhere stu.Name = s.Name and Subject = '物理') 物理
from stu s
group By 姓名那个S 相当与你模拟出另一个stu表,两个表你做出这个查询就容易了,思路是这样的。
这个应该可以,我现在在外面,这个我写过,好象是这么写的,要是你不清楚你给我发个邮件吧,我明天去公司看一下,我放在那机器里面了 ,中午给你回个邮件,[email protected]