-- 你的工作資料表
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://www.ptt.cc/bbs/Database/M.1436767678.A.DEF.html