日期:2014-05-17  浏览次数:20651 次

结构化SQL语句练习
在不使用流程语句(如:if、while...)的情况下写出如下效果:

CREATE TABLE SheBeiRunHuaBiao  --润滑设备表
(
F_NAME VARCHAR(50)  --润滑名称
,F_DATE DATETIME    --润滑日期
,F_CYCLE INT        --润滑周期
,F_MARK VARCHAR(10) --润滑标记,已完成,未完成
)
--基础数据
INSERT INTO SheBeiRunHuaBiao(F_NAME,F_DATE,F_CYCLE,F_MARK)
--设备A
SELECT '设备A','2013-09-01',2,'已完成'
UNION ALL
SELECT '设备A','2013-09-03',2,'已完成'
UNION ALL
SELECT '设备A','2013-09-05',2,'已完成'
UNION ALL
SELECT '设备A','2013-09-07',2,'已完成'
UNION ALL
SELECT '设备A','2013-09-09',2,'已完成'
UNION ALL
SELECT '设备A','2013-09-11',2,'已完成'
UNION ALL
SELECT '设备A','2013-09-13',2,'已完成'
UNION ALL
SELECT '设备A','2013-09-15',2,'已完成'

--设备B
SELECT '设备B','2013-09-01',3,'已完成'
UNION ALL
SELECT '设备B','2013-09-04',3,'已完成'
UNION ALL
SELECT '设备B','2013-09-07',3,'已完成'
UNION ALL
SELECT '设备B','2013-09-10',3,'已完成'
UNION ALL
SELECT '设备B','2013-09-13',3,'已完成'

--设备C
SELECT '设备C','2013-09-01',4,'已完成'
UNION ALL
SELECT '设备C','2013-09-05',4,'已完成'
UNION ALL
SELECT '设备C','2013-09-09',4,'已完成'
UNION ALL
SELECT '设备C','2013-09-13',4,'已完成'

--设备D
SELECT '设备D','2013-09-01',5,'已完成'
UNION ALL
SELECT '设备D','2013-09-06',5,'已完成'
UNION ALL
SELECT '设备D','2013-09-11',5,'已完成'

/*
现在要求写出一个存储过程,要求如下
1.该存储过程有两个变量 @BeginDate ,@EndDate,查询出在这两个日期范围内润滑设备表SheBeiRunHuaBiao 的所有记录
2.如果润滑设备表SheBeiRunHuaBiao在@BeginDate 和 @EndDate 没有润滑记录,
  需先根据每个设备的最后润滑日期F_DATE+润滑周期F_CYCLE,不断向后循环,
  计算出下一个润滑日期,润滑标记F_MARK默认为'未完成'。
  现有的记录则查出符合条件的。
  
比如:要查询 "2013-09-10"到"2013-09-20" 这两个日期范围内润滑设备表SheBeiRunHuaBiao 的所有记录
我们就先看 "设备D" 的信息
在这个范围内,设备D 只有一条记录

'设备D','2013-09-11',5,'已完成'
通过润滑日期F_DATE+润滑周期F_CYCLE,我们可以计算出下一个设备润滑记录
'设备D','2013-09-16',5,'未完成'
以此类推,统计出'设备A','设备B','设备C'在这个时间范围内的所有记录。

*/




过20楼 贴出本菜鸟的SQL~~~  抛砖引玉 求大神来~~~~~~~~~~~~~~~~~~~~
------解决方案--------------------
这个真心的长
------解决方案--------------------
貌似可以用CTE实现
楼下写吧。交给唐诗也可以。
------解决方案--------------------
围观新版主表演
------解决方案--------------------
小F说这个真心难,交给别人吧。

楼下继续,看能到20楼不。。
------解决方案--------------------
發糞塗牆 也当观众了,
这个趋势,板板们是都要当观众了
------解决方案--------------------
楼主说:过20楼 贴出本菜鸟的SQL~~~  抛砖引玉 求大神来

不知道各位板板的板砖会不会出来啊,能不能把楼主的玉给引出来呢。

弱弱的问一句,楼主,你现在的条件不变,改为sql2000环境来写,会什么效果呢?
------解决方案--------------------
新版主呢~~坐等
------解决方案--------------------
try this,

CREATE TABLE SheBeiRunHuaBiao  --润滑设备表
(
F_NAME VARCHAR(10)  --润滑名称
,F_DATE DATETIME    --润滑日期
,F_CYCLE INT        --润滑周期
,F_MARK VARCHAR(10) --润滑标记,已完成,未完成
)

INSERT INTO SheBeiRunHuaBiao(F_NAME,F_DATE,F_CYCLE,F_MARK)
SELECT '设备A','201