日期:2014-05-18  浏览次数:20594 次

求助各位大神,关于SQL语句
我现在接到几道关于SQL的测试题,希望大家能够帮我一下:

数据库:

表一:
活动ID 月 日 年 具体活动 项目 人员ID

表二:
收据ID 活动ID 数量

表三:
人员ID 国家ID 注册日期

现在有一个问题是,注册日期是 1/6/2011之类的格式,但是在表一里面这些格式被分开了

我需要解答的问题:

1. 如何用SQL语句算出某人员第一天注册时一共产生了多少收据?
2. 如何用SQL语句算出某注册了5年的用户上周产生了多少收据?
3. 如何用SQL语句去计算各个活动产生收据在收据总量里面所占的百分比?

本人菜鸟一只,正在学SQL,希望各路大仙给一些提示。谢谢!

------解决方案--------------------
1

select a.人员ID,b.收据ID,c.注册日期 from tb1 a,tb2 b,tb3 c
where a.人员ID=c.人员ID and a.活动ID=b.活动ID
and c.注册日期='1/6/2011'

------解决方案--------------------
SQL code

-- 1. 如何用SQL语句算出某人员第一天注册时一共产生了多少收据?
select sum(b.数量) '数量'
from 表一 a
inner join 表二 b on a.活动ID=b.活动ID
where a.人员ID=[某人员] and cast(rtrim(a.年)+'/'+rtrim(a.月)+'/'+rtrim(a.日) as date)
=(select top 1 cast(c.注册日期 as date) from 表三 c where c.人员ID=a.人员ID)

-- 2. 如何用SQL语句算出某注册了5年的用户上周产生了多少收据?
select sum(b.数量) '数量'
from 表一 a
inner join 表二 b on a.活动ID=b.活动ID
where a.人员ID=[某注册了5年的用户] and
datediff(wk,cast(rtrim(a.年)+'/'+rtrim(a.月)+'/'+rtrim(a.日) as date),getdate())=1

-- 3. 如何用SQL语句去计算各个活动产生收据在收据总量里面所占的百分比?
select a.活动ID,
cast(sum(b.数量)*1.0/(select sum(数量) from 表二)*100 as varchar(5))+'%' '百分比'
from 表一 a
inner join 表二 b on a.活动ID=b.活动ID
group by a.活动ID

------解决方案--------------------


还有一个小问题,就是关于 挑选注册5年的用户的问题,我想应该是现在的日期跟他的注册时间相减,然后判断是否大于5*365天?
不过本人太菜了,不知道咋写出来……


 select DATEadd (YY ,-5,getdate())

得到的时间就是五年前的今天
------解决方案--------------------
SQL code

-- 挑选注册5年的用户
select * from 表三
where datediff(yyyy,cast(注册日期 as date),getdate())>=5