我现在接到几道关于SQL的测试题,希望大家能够帮我一下:数据库:表一:
活动ID 月 日 年 具体活动 项目 人员ID表二:
收据ID 活动ID 数量表三:
人员ID 国家ID 注册日期现在有一个问题是,注册日期是 1/6/2011之类的格式,但是在表一里面这些格式被分开了我需要解答的问题:1. 如何用SQL语句算出某人员第一天注册时一共产生了多少收据?
2. 如何用SQL语句算出某注册了5年的用户上周产生了多少收据?
3. 如何用SQL语句去计算各个活动产生收据在收据总量里面所占的百分比?本人菜鸟一只,正在学SQL,希望各路大仙给一些提示。谢谢!

解决方案 »

  1.   

    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'
      

  2.   


    -- 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
      

  3.   


    错了,应该是 sum(b.收据ID)
      

  4.   

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

  5.   


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