作者cutekid (可爱小孩子)
看板Database
标题Re: [SQL ] 工作排程天数由sql算出
时间Mon Jul 13 14:07:56 2015
-- 你的工作资料表
create table #job(
task char(1), -- 工作项目
pre1 char(1), -- 前置工作项目1
pre2 char(1), -- 前置工作项目2
jobDay integer -- 工作天数
)
-- 答案暂存 table
create table #temp(
task char(1), -- 工作项目
start integer, -- 第几天开始
finish integer -- 第几天结束
)
-- 预处理
insert into #temp (task)
select task from #job
-- 跑回圈 propagate
while 1 = 1 begin
update t1
set start = t2.finish , finish = t2.finish + t2.jobDay
from #temp t1 inner join (
select
t1.task, t1.jobDay,
case when isnull(t2.finish,0) > isnull(t3.finish,0) then isnull(t2.finish,0)
else isnull(t3.finish,0)
end finish
from #job t1
left join #temp t2 on t1.pre1 = t2.task
left join #temp t3 on t1.pre2 = t3.task
where not ((pre1 is not null and t2.finish is null) or (pre2 is not null and t3.finish is null))
) t2 on t1.task = t2.task
where t1.finish is null
if @@ROWCOUNT = 0 break
end
-- 显示答案
select * from #temp
※ 引述《chermany (qq)》之铭言:
: 资料库名称:SQL server
: 资料库版本:2012
: 内容/问题描述:
: 请问我有个资料表如下:
: 工作项目 前置工作项目1 前置工作项目2 工作天数
: ================================================================
: A 1
: B A 3
: C A B 5
: D A 2
: 我想得到:
: 工作项目 第几天开始 第几天结束
: ================================================================
: A 0 1
: B 1 4
: C 4 9
: E 1 3
: 每个工作项目都需要前置工作1、2项目全部结束後才能开始,前置工作项
: 目的结束天数=衔接的工作项目的开始天数,这样结果是否能使用sql语法表示?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.221.80.36
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1436767678.A.DEF.html