四个Sql程序员面试题

午夜还在张 2009-11-29 11:31:59
一、
教师号  星期号 是否有课
 1    2   有
 1    3   有
 2    1   有
 3    2   有
 1    2   有
写一条sql语句让你变为这样的表
教师号 星期一 星期二 星期三
 1       2   1 
 2   1   
 3       1
各星期下的数字表示:对应的教师在星期几已经排的课数


二、
书表(books)
book_id,book_name,creatdate,Lastmodifydate,decription
001,三个人的世界,2005-02-02,2005-07-07,NULL
作者表(authors)
A_id,A_name
01,王纷
02,李尚
03,泰和
部门表(depts)
d_id,d_name
001,编辑一部
002,编辑二部
003,编辑三部
书和作者关联表(bookmap)
book_id,A_id
001,01
001,02
001,03
部门和作者关联表(depmap)
d_id,a_id
001,01
002,02
003,03
找出每个部门的所写的总书两,比如,一本书有3个人写,如果三个人在不同的部门,则每个部门的总数量就是1.最后结果如下:
部门,书量
编辑一部,1
编辑二部,1
编辑三部,1

三、
两个表情况
表名:wu_plan
ID plan model corp_code plannum prixis
1 00001 exx22 nokia 2000 0
2 00002 lc001 sony 3000 0

表名:wu_bom
ID plan pact amount
1 00001 aa1 300
2 00001 aa2 200
3 00002 bb1 500
4 00002 bb2 800
5 00002 bb3 400

查询这两个表中plan唯一,每一个plan中,amount最少的,plannum大于prixis的记录
结果是:
ID plan model corp_code plannum prixis pact amount
1 00001 exx22 nokia 2000 0 a2 200
2 00002 lc001 sony 3000 0 bb3 400

四、
表1结构如下:
部门 条码 品名 销售额 销售数量 销售日期

表2结构如下
课别 部门
...全文
2186 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
strawbingo 2009-12-08
  • 打赏
  • 举报
回复
第二题

select de.d_name,count(*)
from DEPTS de,bookmap b,depmap dm
where de.d_id = dm.d_id
and dm.a_id = b.a_id
group by de.d_name
yikaonetyao 2009-12-03
  • 打赏
  • 举报
回复
牛人
好久没看sql了
都有些晕了
moubo 2009-12-02
  • 打赏
  • 举报
回复
收藏
jiang_chao 2009-12-02
  • 打赏
  • 举报
回复
学习
ddltxj 2009-12-02
  • 打赏
  • 举报
回复
关注
rtygbwwwerr 2009-12-01
  • 打赏
  • 举报
回复
第一题:
select
TEACHER_ID,
DAY_ID,
SUM(CASE HAVE_FLG
WHEN '有' THEN 1
ELSE 0
END) AS CNT
from T_CLASS
GROUP BY TEACHER_ID,DAY_ID
ORDER BY TEACHER_ID
第二题:
SELECT
DEPTS.D_ID,
SUM(CASE
WHEN BOOKS.BOOK_ID IS NOT NULL
THEN 1
ELSE 0
END
) AS COUNTBOOKS
FROM
DEPTS,DEPMAP,BOOKMAP,BOOKS
WHERE DEPMAP.D_ID = DEPTS.D_ID
AND DEPMAP.A_ID = BOOKMAP.A_ID
AND BOOKMAP.BOOK_ID = BOOKS.BOOK_ID
GROUP BY DEPTS.D_ID
ORDER BY DEPTS.D_ID
Crystalzhou 2009-12-01
  • 打赏
  • 举报
回复
mark
andylauhai 2009-12-01
  • 打赏
  • 举报
回复
留着
Even713 2009-12-01
  • 打赏
  • 举报
回复
帮顶~
shenghuat 2009-12-01
  • 打赏
  • 举报
回复
作业啊?
jenny0810 2009-12-01
  • 打赏
  • 举报
回复
收藏
鹤然 2009-11-30
  • 打赏
  • 举报
回复
标记
hlyces 2009-11-30
  • 打赏
  • 举报
回复
mark
huangxinzhang 2009-11-30
  • 打赏
  • 举报
回复
mark
nanhu086 2009-11-30
  • 打赏
  • 举报
回复
easy
hzfurongmu 2009-11-30
  • 打赏
  • 举报
回复
可以收藏
start2008 2009-11-30
  • 打赏
  • 举报
回复
Mark!!!
午夜还在张 2009-11-30
  • 打赏
  • 举报
回复
Create table Lessions

(教师号 nvarchar(20),
星星期号 int,
是否有课 nvarchar(8))


insert Lessions select 1,2,'有'
union all
select 1,3,'有'
union all
select 2,1,'有'
union all
select 3,2,'有'
union all
select 1,2,'有'

select * from lessions

Select 教师号,
星期一=sum(case 星期号 when 1 then 1 else 0 end),
星期二=sum(case 星期号 when 2 then 1 else 0 end),
星期三=sum(case 星期号 when 3 then 1 else 0 end),
星期四=sum(case 星期号 when 4 then 1 else 0 end),
星期五=sum(case 星期号 when 5 then 1 else 0 end)
from
Lessions
group by 教师号
order by 教师号


select * from(
select d_name,sum(P.书量) as 书量 from depts c left join depmap d on c.d_id = d.d_id left join
(select a.a_id,count(a.book_id) as 书量 from bookmap a left join books b on a.book_id=b.book_id group by a.a_id) as P
on p.a_id=d.a_id group by d_name order by d_name desc )as A
order by d_name collate Chinese_PRC_Stroke_ci_as

三:

两个表情况
表名:wu_plan
ID plan model corp_code plannum prixis
1 00001 exx22 nokia 2000 0
2 00002 lc001 sony 3000 0

表名:wu_bom
ID plan pact amount
1 00001 aa1 300
2 00001 aa2 200
3 00002 bb1 500
4 00002 bb2 800
5 00002 bb3 400

查询这两个表中plan唯一,每一个plan中,amount最少的,plannum大于prixis的记录
结果是:
ID plan model corp_code plannum prixis pact amount
1 00001 exx22 nokia 2000 0 a2 200
2 00002 lc001 sony 3000 0 bb3 400


select a.*,b.pact,b.amount
from wu_plan a
join wu_bom b
on a.[plan]=b.[plan] and not exists(select 1 from wu_bom where [plan]=b.[plan] and amount<b.amount)
where a.plannum>a.prixis

select 1 from wu_plan where [plan] = '00003'
select * from wu_bom
四:
表1结构如下: TB1
部门 条码 品名 销售额 销售数量 销售日期

表2结构如下 TB2
课别 部门


***********************************************************************************
--1.字段ID唯一时:
SELECT * FROM #T AS T WHERE ID IN(SELECT TOP 2 ID FROM #T WHERE GID=T.GID ORDER BY Date DESC)

--2.如果ID不唯一时:
SELECT * FROM #T AS T WHERE 2>(SELECT COUNT(*) FROM #T WHERE GID=T.GID AND Date>T.Date)

--SQL Server 2005 使用新方法

--3.使用ROW_NUMBER()进行排位分组
SELECT ID,GID,Author,Title,Date
FROM
(
SELECT rid=ROW_NUMBER() OVER(PARTITION BY GID ORDER BY Date DESC),*
FROM #T
) AS T
WHERE rid<=2

--4.使用APPLY
SELECT DISTINCT b.*
FROM #T AS a
CROSS APPLY
(
SELECT TOP(2) * FROM #T WHERE a.GID=GID ORDER BY Date DESC
) AS b
pt1314917 2009-11-29
  • 打赏
  • 举报
回复

--忘记加条件了where 是否有课='有'。


declare @sql varchar(8000)
set @sql='select 教师号'
select @sql=@sql+',['+case 星期号 when 1 then '星期一' when 2 then '星期二'
when 3 then '星期三' when 4 then '星期四' when 5 then '星期五'
when 6 then '星期六' when 7 then '星期七' end
+']=sum(case 星期号 when '+ltrim(星期号)+' then 1 else null end)'
from (select distinct 星期号 from tb)a
set @sql=@sql+' from tb where 是否有课=''有'' group by 教师号'
exec(@sql)
feixianxxx 2009-11-29
  • 打赏
  • 举报
回复
...
加载更多回复(25)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧