日期:2014-05-16  浏览次数:20575 次

sql 面试题 请高手解答,很急!!!,在线等候!,
sql 面试题:明天就用,非常感谢您的回答。
我在线等候!!
一、要求:
一个完整的项目,共3个页面(页面样式无要求),2个表,自己设计表,用存储过程写
二、详细说明
1. 现在有4个人 分别是张三、李四、王五、赵二,关系如下图

                    张三
                   /   \
                李四    赵二
                 /
               王五


2. 需要在页面显示如下
标识 姓 名 级别
1 张 三 一级
2 李 四 二级
3 王 五 三级
4 赵 二 二级

3. 他们每天花的钱数和统计总数,在页面显示如下
姓名 周一 周二 周三 周四 周五 周六 周日 总花钱数(需要计算出来)
张三 100 30 300 40 100 30 200 800
李四 150 20 100 50 150 80 100 650
王五 200 100 200 50 200 50 100 900
赵二 150 200 100 50 60 140 200 900



4. 现在需要显示出这3个人总花钱数,页面显示如下
标识 姓名 图关系一周总花钱
1 张三 (张三+李四+王五+赵二)
2 李四 (李四+王五)
3 王五 (王五)
4 赵二 (赵二)

------解决方案--------------------
1. 树状结构的表格设计基本如下:
ID, parentID, infos....

2.表格2:列名:姓名,费用,日期
select 
  姓名,
  Case 
    when DATEPART( WEEKDAY,getdate()) =1 then 费用 end as '周一',
    Case 
    when DATEPART( WEEKDAY,getdate()) =2 then 费用 end as '周二'
....
from 表格2

3. 根据关系图,把姓名集合找出来,然后求和
------解决方案--------------------
use tempdb;
go
IF OBJECT_ID('dbo.users','U') IS NOT NULL    DROP TABLE dbo.users;
IF OBJECT_ID('dbo.users_money','U') IS NOT NULL    DROP TABLE dbo.users_money;
--创建人员信息表
CREATE TABLE users (id INT NOT NULL,name varchar(50) NOT NULL,manager INT );
?
INSERT INTO users VALUES 
(1,'张三',0),(2,'李四',1),(3,'赵二',1),(4,'王五',2),(5,'陈六',2)
?
?
----创建费用表
CREATE TABLE users_money([userid] INT,[date] date,[money] INT);
?
INSERT INTO users_money VALUES
(1,GETDATE(),FLOOR(RAND()*100)),
(1,DATEADD(DAY,1,GETDATE()),FLOOR(RAND()*100)),
(1,DATEADD(DAY,2,GETDATE()),FLOOR(RAND()*100)),
(1,DATEADD(DAY,3,GETDATE()),FLOOR(RAND()*100)),
(1,DATEADD(DAY,4,GETDATE()),FLOOR(RAND()*100)),
(1,DATEADD(DAY,5,GETDATE()),FLOOR(RAND()*100)),
(1,DATEADD(DAY,6,GETDATE()),FLOOR(RAND()*100)),
(2,GETDATE(),FLOOR(RAND()*100)),
(2,DATEADD(DAY,1,GETDATE()),FLOOR(RAND()*100)),
(2,DATEADD(DAY,2,GETDATE()),FLOOR(RAND()*100)),
(2,DATEADD(DAY,3,GETDATE()),FLOOR(RAND()*100)),
(2,DATEADD(DAY,4,GETDATE()),FLOOR(RAND()*100)),
(2,DATEADD(DAY,5,GETDATE()),FLOOR(RAND()*100)),
(2,DATEADD(DAY,6,GETDATE()),FLOOR(RAND()*100)),
(3,GETDATE(),FLOOR(RAND()*100)),
(3,DATEADD(DAY,1,GETDATE()),FLOOR(RAND()*100)),
(3,DATEADD(DAY,2,GETDATE()),FLOOR(RAND()*100)),
(3,DATEADD(DAY,3,GETDATE()),FLOOR(RAND()*100)),
(3,DATEADD(DAY,4,GETDATE()),FLOOR(RAND()*100)),
(3,DATEADD(DAY,5,GETDATE()),FLOOR(RAND()*100)),
(3,DATEADD(DAY,6,GETDATE()),FLOOR(RAND()*100)),
(4,GET