问题描述
- 查询一张表中的某个字段对应另一张表中多条数据某个字段等于第一张表的那个字段的数据,并按要求显示
-
给的表例如
表一:
stuID stuName
1 小明
2 小红表二: stuID course Score 1 数学 97 1 语文 70 1 英语 88 2 数学 92 要求查询结果为: stuID stuName 语文 数学 英语 1 小明 70 97 88 2 小红 92
解决方案
类似下面这样,下面语句没有调测过。
select stuID,(select stuName from 表一 where 表一.stuID=t.stuID) stuName
from(
select sum(case course when '数学' then Score else 0 end) 数学
,sum(case course when '语文' then Score else 0 end) 语文
,sum(case course when '英语' then Score else 0 end) 英语,stuId
from 表二 group by stuId
)
另外,可参见http://blog.csdn.net/danielinbiti/article/details/44977749微博中写的这种方式的过程
解决方案二:
select stuName,course,score from stu s and score sc where s.stuId=sc.stuId grop by stuId
解决方案三:
select stuID, stuName, '数学', '语文', '英语'
from (select stuID, stuName from 表一) as t1
join (select stuID, sum(case course '数学' then Score else 0 end) as '数学',
sum(case course '语文' then Score else 0 end) as '语文',
sum(case course '英语' then Score else 0 end) as '英语' from 表二 group by stuID) as t2
on t1.stuID=t2.stuID;
解决方案四:
说实话 没怎么看懂你的问题
select * from 表1名字 t1
left join 表2名字 t2 on t1.stuid=t2.stuid
go
这是联接查询 将两张表中的内容查出来 放在一张表显示
可以直接将代码拖过去运行 你试试 另外 要显示你指定的列的话 将* 换成列名1,列名2.。。。
希望对你有用
解决方案五:
select stuID,stuName,[语文],[数学],[英语] from (select stuName,t12.stuID,course,score from t12,t11 where t11.stuID=t12.stuID) as ST pivot
(sum(score) for course in([数学],[语文],[英语])) as PT order by stuID
stuID stuName 语文 数学 英语
1 小明 70 97 88
2 小红 NULL 66 NULL