用一条SQL语句显示所有人员的姓名及所在部门

给定以下两个表:
部门ID 部门名称
1 部门1
2 部门2
3 部门3
4 部门4

人员ID 人员姓名 部门ID
1 姓名1 1
2 姓名2 1
3 姓名3 2
4 姓名4 3
5 姓名5 5

(1)用一条SQL语句显示所有人员的姓名及所在部门,没有部门的用“未标志”代替。
(2)用ASP。NET中的DATAGRID控件,实现以下显示,描述你的思路。

姓名1
部门1 姓名2

部门2 ……
部门3
请前辈赐教!

数据库表 test 字段id,name,fen,type,目的是按type分组,查询每组最大的fen值。

方法一、select b.id,b.type,b.name,b.fen from

(select type,max(fen) from test group by type ) a,/*利用group by 命令按照type分组查找每组最大的fen列值,查询后所得到的数据定义为表a*/

test b /*将原表test定义为表b*/

where b.type = a.type and b.fen = a.fen /*根据表a取得的数据列再到b表中查询对应的数据行得到最终目的*/

解释:这一方法主要使用了sql多表查询,表的别名思想

方法二:

select id,fen,name from test where fen in(select type,max(fen) from test group by type)

解释:这一方法比较直接,直接根据in引入查询子句

总之,个人感觉第一种方法比较实用,根据两个表相互查询,控制起来比较直观也方便操作;第二种方法很是直接,但是有一点问题,我在实际应用中用top 5控制,分类中type只有4项,在显示的时候有一个分类是重复的。重复之后要取唯一项很是麻烦,所以我直接换用了第一种方法。

实际应用中的一点小心得,有不对的请指教,也欢迎大家来一起讨论,寻找更优的解决方法。

参考资料:http://www.qdxkj.com/shownew.aspx?wzid=52

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-23
0分啊.......只给你第一题的代码好了
select 部门.部门ID,isnull(部门.部门名称,'未标志') ,人员.人员ID,人员.人员姓名
from 部门 right join 人员 on 人员.部门ID = 部门.部门ID

第二题以部门为数据源做一个DATAGRID,里面再套一个DATAGRID,以人员为数据源,使用第一个DATAGRID的部门ID为条件筛选。本回答被提问者采纳
第2个回答  2010-06-10
select 人员姓名,isnull(部门名称,'未标志') 部门名称
from 人员表 left join 部门表 on 人员表.部门ID=部门表.部门ID
相似回答