请教高手:写SQL语句完成所要求的数据查询(面试题)

alex50250 2004-02-19 06:13:03
写SQL语句完成所要求的数据查询
表结构:
1、收付款记录表。用于记录每次收/付款的情况,fx='0'表示收款,fx='1'表示付款,gh表示操作员工号
jkjl(
gh char(6),
rq datetime,
fx char(1),
je numeric(7,2))
例如:
001 2001-9-1 0 1500.25
001 2001-9-1 0 250.00
002 2001-9-1 1 350.75
003 2001-9-2 0 123.11

2、人员表。用于记录操作员的工号与姓名,其中id为jkjl中gh的外键
rsb(id char(6),xm char(10))

问题:
写一条SQL语句,完成以下查询:
1.要求每天汇总一条记录,生成类似如下的结果:
日期 方向 金额
2001-9-1 付 1750.25
2001-9-1 收 350.75
2001-9-2 付 123.11
2001-9-2 收 0.00
--------

2.将rsb中的id重复的记录查询出来(要考虑姓名也重复的情况)
3.要求每天汇总一条记录,生成类似如下的结果:
日期 收款金额 付款金额
2001-9-1 1750.25 350.75
2001-9-2 123.11 0.00
-------

4.查询每天收/付款金额最多的人,生成如下结果的报表:
日期 收/付款冠军名 方向 金额
2001-9-1 XXX 收 1750.25
-------

5.查询累计金额(收款 - 付款)最多的人,生成如下结果报表:
姓名 累计金额
XXX 2250.25

6.查询每天收/付款金额最多的人,生成如下结果报表:
日期 收款冠军姓名 收款金额 付款冠军姓名 付款金额
2001-9-1 XXX 1750.25 XXX 350.75
...全文
314 10 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sky125 2004-08-19
mark
  • 打赏
  • 举报
回复
chinaandys 2004-08-02

/*第一题*/
select rq'日期',
方向=(case when fx='0' then '付'
when fx='1' then '收'
end),金额=sum(je)
from jk
group by fx,rq
go
/*第二题*/
select [id]=identity(int,1,1),* into #t from jk
select * from #t where [id] not in(select min([id]) from #t group by gh,rq,fx)
drop table #t
go
/*第三题*/
select rq'日期',isnull(sum(case fx when '0' then je end),0)'付款金额',
isnull(sum(case fx when '1' then je end),0)'收款金额'
from jk group by rq
go
/*第五题*/
select top 1 gh'姓名',金额=sum(je) from jk group by gh order by 金额 desc
go
  • 打赏
  • 举报
回复
liyuxuan 2004-07-31
:)
  • 打赏
  • 举报
回复
exingsa 2004-07-30
up
  • 打赏
  • 举报
回复
sisici 2004-07-28
5.少加了 sum
select top 1 xm as 姓名,累计金额=sum(case fx when '0' then je else 0 - je end) from jkjl,rsb
where gh = id group by xm
  • 打赏
  • 举报
回复
sisici 2004-07-27
5.
select top 1 xm as 姓名,累计金额=(case fx when '0' then je else 0 - je end) from jkjl,rsb
where gh = id group by xm
6.
select jkjl.rq as 日期,
a.xm as 收款冠军,
收款金额=max(case a.fx when '0' then a.zje end),
b.xm as 付款冠军,
付款金额=max(case b.fx when '0' then b.zje end)
from jkjl,rsb,(select rq ,gh fx,sum(je) as zje from jxjl,rsb group by rq,gh,fx) a,
(select rq ,gh fx,sum(je) as zje from jxjl,rsb group by rq,gh,fx) b
where gh = id and jkjl.rq = a.rq and jkjl.rq = b.rq
order by jkjl.rq
  • 打赏
  • 举报
回复
WangZWang 2004-07-27
贴错地方, UP
  • 打赏
  • 举报
回复
WangZWang 2004-07-27
试试, 把本地的computer加入到远程服务器的域中
  • 打赏
  • 举报
回复
lenghuazhang 2004-07-27
up
  • 打赏
  • 举报
回复
wzqinyfwu 2004-07-27
做了前面5题:
1.
select rq,case fx when 0 then '收' else '付' end,count(je) from jkjl group by rq,fx

2.
select id,count(id) from rsb group by id having count(id)>1

3.
select c.rq,a.skje,b.fkje from jkjl as c join
(select rq,skje=sum(je) from jkjl where fx=0 group by rq) as a
on c.rq=a.rq
join
(select rq,fkje=sum(je) from jkjl where fx=1 group by rq) as b
on c.rq=b.rq
group by c.rq,a.skje,b.fkje

4.
select top 1 rq,rsb.xm,fx,sum(je) from jkjl,rsb where jkjl.gh=rsb.id group by rq,fx,rsb.xm order by sum(je) desc

5.
select top 1 gh,sum(je) from jkjl group by jkjl.gh order by sum(je) desc
  • 打赏
  • 举报
回复
发帖
MS-SQL Server

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
帖子事件
创建了帖子
2004-02-19 06:13
社区公告
暂无公告