ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的测验 > SQL in Excel > [练习]SQL一题[已总结]

[练习]SQL一题[已总结]

作者:绿色风 分类: 时间:2022-08-18 浏览:185
楼主
海洋之星
题目要求:利用一条sql语句得到如效果图所示效果
备注:大家可以使用其他方法,只要是批量得到的都正确。

 
职工表.rar
2楼
wise
  1. select B.组别,A.组长,B.组员 from (select 组别,姓名 as 组长 from [职工表$A:E] where 职务="组长") A,(select 组别,姓名 as 组员 from [职工表$A:E] where 职务<>"组长") B  where B.组别=A.组别 order by B.组别
3楼
mn860429
  1. select a.组别,a.姓名 as 组长,b.姓名 as 组员 from [职工表$a1:e20] a,[职工表$a1:e20] b where a.职务='组长' and a.组别 =b.组别 and b.职务<>'组长'

4楼
海绵宝宝
  1. select a.组别,a.姓名,b.姓名 from [职工表$A1:E20] as a left join [职工表$A1:E20] as b on  (a.组别=b.组别 and a.职务='组长')
5楼
海绵宝宝
应该是这样的
  1. select a.组别,a.姓名,b.姓名 from [职工表$A1:E20] as a left join [职工表$A1:E20] as b on (a.组别=b.组别 and a.职务='组长' and b.职务='组员')
6楼
海绵宝宝
再发上一段彻底剖析这道题目思路的语句,因为是剖析,所以语句稍微长了点,哈哈
  1. select a.组别,a.姓名 as 组长,b.姓名 as 组员 from (select * from [职工表$A1:E20] where 职务='组长') as a,(select * from [职工表$A1:E20] where 职务='组员') as b where a.组别=b.组别 order by a.组别
7楼
海绵宝宝
再发一句,希望从我发的三句中发现一点规律和心得来,嘿嘿
  1. select a.组别,a.姓名 as 组长,b.姓名 as 组员 from [职工表$A1:E20] as a,[职工表$A1:E20] as b where a.组别=b.组别 and a.职务='组长' and b.职务='组员'order by a.组别
8楼
amulee
  1. select a.组别,a.姓名 as 组长,b.姓名 as 组员 from ([职工表$] a left join [职工表$] b on a.组别=b.组别 and a.姓名<>b.姓名) where a.职务="组长"
9楼
wjc2090742
定义了1个名称T。

  1. select a.组别,a.姓名 as 组长,b.姓名 as 组员 from T a,T b where a.职务='组长' and b.职务='组员' and a.组别=b.组别 order by a.组别

职工表.rar
10楼
水星钓鱼
  1. select a.组别,a.姓名 as 组长,b.姓名 as 组员 from (select 组别,姓名 from [职工表$a1:e20]  where 职务='组长') a ,[职工表$a1:e20] b  where a.组别=b.组别 and b.职务='组员' order by a.组别
11楼
xyh9999
回复一下 见见
12楼
wise
呵呵,我写法是最长的,我是按照思路一步一步地写的。
让读这代码的人比较容易理解,知道是怎么来的。
13楼
海洋之星
总结:
说明:这个题是全国计算机等级考试二级VF一道SQL题
分析:
1、从效果图上可以看出两点:(1)是查询结果按照组别进行升序进行的排序,所以我们要用到order by 短语,对其进行排序。(2)我们从组长与组员这两列字段中的记录可以看到,每条记录中没有姓名相同的,所以我们就可以得到一个where条件:c.姓名<>p.姓名,最后一点大家都想到了就是利用别名将原表换成两个数据源,分别得到组长字段和组员字段。
2、我给出来SQL语句为:
  1. select p.组别,c.姓名 as 组长,p.姓名 as 组员 from [职工$] p ,[职工$] c where p.组别=c.组别 and c.职务="组长"  and c.姓名<>p.姓名 order by p.组别
如果有不足之处,请大家多多指点,谢谢!
14楼
zm0115
虽然都已经结束了,还是补充一个,:)  见笑

select a.组别,(select 姓名 from [职工表$] where 组别=a.组别 and 职务='组长') as 组长,a.姓名 from  [职工表$] a where 职务='组员' order by 1,3
15楼
zm0115
职工表.rar
放个附件

这个应该比较常用,至少我经常这么干,:)  外面一个查询的值可以作为()里面查询的一个条件的。这个题目正好,每个组组长都是唯一的,组别和组长一一对应。所以可以这么用。如果有不唯一就不行了,可能产生“笛卡尔积”(好像是这么说的)

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap