表:A01(人员基本情况表)和A32(职务信息表)
A01(主表)结构
字段名称 数据类型 备注
========================================
Z0001 int 主关键字
a0101 varchar 姓名
a0102 varchar 地址
a0103 int 性别
a0104 char 出生年月
A32(子表)结构
Z0001 int 关键字(外键)
a0105 varchar 所在职务
a0106 char 上任日期
b0001 varchar 职务单位
问题(3)查询出职务变更最频繁的人,显示出此人的姓名
提示:例如A01和A32中有如下数据时,职务变更最频繁的是人是“魏新”
A01表中数据
z0001 a0101 a0102 a0103 a0104
10000 魏新 男 黑龙江 19800110
10001 林强 男 内蒙古 19801221
a32表中数据
z0001 a0105 a0106 b0001
10000 科长 19990110 A单位
10000 处长 20000123 B单位
10001 科长 19980213 E单位
10000 局长 20021104 C单位
create table A01(Z0001 int primary key,a0101 varchar,a0102 varchar,a0103 int,
a0104 char)
create table A32(Z0001 int foreign key references A01(Z0001) ,a0105 varchar, a0106 char,b0001 varchar)
insert into A01 values(10000, '魏新' ,'黑龍江','1' ,'19800110')
insert into A01 values(10001, '林強' ,'内蒙古','1' ,'19801221')
insert into A32 values(10000, '科长' ,'19990110' ,'A单位')
insert into A32 values(10000, '处长' ,'20000123' ,'B单位')
insert into A32 values(10000, '科长' ,'19980213' ,'E单位')
insert into A32 values(10000, '局长' ,'20021104' ,'C单位')
---问题(3)查询出职务变更最频繁的人,显示出此人的姓名
SELECT * FROM A01
WHERE Z0001=(
SELECT TOP 1 Z0001 FROM A32 GROUP BY Z0001 ORDER BY COUNT(*) DESC
)
第二题、现有一个表table1只有一个字段F1,表中数据如下:
Z0001
0
1
2
3
4
5
6
7
8
9
问题:用现有的数据用一个SQL语句构造出一个1-9999的结果集,类似如下:
1
2
... ...
9999
select
convert(int,convert(char(1),a.name)+
convert(char(1),b.name)+
convert(char(1),c.name)+
convert(char(1),d.name))+1 as cc
from dbo.test a,dbo.test b,dbo.test c,dbo.test d order by cc
----------------------------------------------
WITH CTE AS(
SELECT Name+1 AS N from dbo.test
UNION all
SELECT N+10 AS N FROM CTE WHERE N+10<=9999)
SELECT * FROM CTE order by N OPTION (MAXrecursion 0)
第三题
如下表(T2)为某班级某一学期的数学成绩:
学号 成绩
199801001 85
199801002 76
199801003 98
199801004 54
199801005 39
199801006 61
问题:请根据t2表的内容输出如下两行数据,要求SQL语句最简。(60分以上为及格)
类别 人数
============
及格 4
不及格 2
-------------------
select '及格' as [類別],count(*)as [人數] from Student where [成績]>=60
union
select '不及格'as [類別],count(*)as [人數] from Student where [成績]<60
第四题
有如下表T记录人员的情况:
/*create table t_t
(RenID INT PRiMARY KEY,
RenMing CHAR(8),
RenParentID INT REFERENCES t_t(RenID))*/
=======================================
RenID RenMing RenParentID
2 张一 10
3 张二 10
5 王一 11
8 王二 11
10 张_父 15
11 王_父 NULL
15 张_父_父 16
16 NULL
问题:
1、选择出所有没有父的人,注意查询性能。
select * from dbo.bonuses where ParentID IS NULL
2、选择出所有人名中含有“_”的人。
SELECT * FROM dbo.bonuses WHERE NAME LIKE '%[_]%'
3、选择出“张父”的子。
SELECT * FROM dbo.bonuses WHERE ParentID=(SELECT EMPLOYEE_ID FROM dbo.bonuses WHERE NAME='張_父')
4、选择出有“孙子”的人。
WITH C(EMPLOYEE_ID,name,ParentID,LVL,sort) AS
(SELECT *,0 AS LVL,convert(nvarchar,NAME+'-->') FROM dbo.bonuses WHERE ParentID IS NULL
UNION ALL
SELECT A.*,LVL+1 ,convert(nvarchar,(C.sort + A.name+'-->')) as sort FROM dbo.bonuses A JOIN C ON C.EMPLOYEE_ID=A.ParentID
)
SELECT DISTINCT left(sort,charindex('-',sort)-1) AS NAME FROM C WHERE LVL=2
-------------
select * from dbo.bonuses where EMPLOYEE_ID in
(select ParentID FROM dbo.bonuses WHERE EMPLOYEE_ID IN (SELECT ParentID FROM dbo.bonuses ))
----------------
SELECT * FROM dbo.bonuses WHERE NAME LIKE '%_父_父%'
5、选择出如下结果:
项目 张 王
人数 4 3
select '人數' as [項目], sum(case when name like '%張%' then 1 else 0 end) as [張],
sum(case when name like '%王%' then 1 else 0 end) as [王]
from dbo.bonuses
-------
6、选择出如下结果:
项目 人数
王 3
张 4
select '王' as [項目],count(*) as [人數] from dbo.bonuses where name like '%王%'
union
select '張' as [項目],count(*) as [人數] from dbo.bonuses where name like '%張%'
7、将T表中的RenID从1~8排列,不要打乱现有表中数据的关系。
select (select count(*) from dbo.bonuses where EMPLOYEE_ID<=tem.EMPLOYEE_ID) rowid,* from dbo.bonuses tem
-------------------
select row_number() over (order by EMPLOYEE_ID) AS NUM,* from dbo.bonuses
8、选择出“张父”的子(一列一行),两个人名中用“,”相隔。
select name=
stuff(replace(replace((select name from dbo.bonuses where ParentID=10 for xml auto),'
9、编写一存储过程可以列出给定RenID的所有子(包括子的子)。\
create proc getChildren
(@ID int)
AS
begin
select * from dbo.bonuses where ParentID=@ID
union
select B.* from dbo.bonuses A join dbo.bonuses B ON A.EMPLOYEE_ID=B.ParentID
WHERE A.ParentID=@ID
end
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7899089/viewspace-611317/ ,如需转载,请注明出处,否则将追究法律责任。