小抛
2015-05-05 15:45
采纳率: 50%
浏览 3.8k
已采纳

查询一张表中的某个字段对应另一张表中多条数据某个字段等于第一张表的那个字段的数据,并按要求显示

给的表例如
表一:
stuID stuName
1 小明
2 小红

表二:
stuID  course   Score
    1        数学       97
    1        语文        70
    1        英语        88
    2        数学        92

    要求查询结果为:
    stuID   stuName   语文   数学   英语
        1         小明          70       97      88
        2         小红                     92
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • danielinbiti 2015-05-05 15:53
    已采纳

    类似下面这样,下面语句没有调测过。

     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微博中写的这种方式的过程

    点赞 打赏 评论
  • 努力才有未来 2015-05-05 15:51

    select stuName,course,score from stu s and score sc where s.stuId=sc.stuId grop by stuId

    点赞 打赏 评论
  • Nothing-Nowhere 2015-05-06 01:06

    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;

    点赞 打赏 评论
  • yangxing8jn 2015-05-06 02:15

    说实话 没怎么看懂你的问题
    select * from 表1名字 t1
    left join 表2名字 t2 on t1.stuid=t2.stuid
    go
    这是联接查询 将两张表中的内容查出来 放在一张表显示
    可以直接将代码拖过去运行 你试试 另外 要显示你指定的列的话 将* 换成列名1,列名2.。。。
    希望对你有用

    点赞 打赏 评论
  • caiweiqingqing 2015-05-21 01:29

    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

    点赞 打赏 评论

相关推荐 更多相似问题