3
在生產中,我們有3班。在表中描述各移位定時tbl_ShiftSched:獲取工作時間的基礎上排班分鐘
WT - 工作時間,PT - 突破時間。 ShiftTmID - 時間表2和3班。 我正在尋找簡單的方法來獲得開始和結束時間在幾分鐘內的工作時間。 例如,具有之間#2015年5月29日06輸入:10:00#和#2015年5月29日09:30:00#和tbl_WorkStations.WksID = 'GRD'(與ShiftTmID = '3P' 關係工作站代碼)應該給輸出190分鐘。
我在MS Access功能,這給了我所需要的輸出。但是,當遷移到T-SQL時,它變得非常複雜,因爲我沒有找到如何在T-SQL中使用別名的簡單方法。這裏是代碼:
USE [STRDAT]
GO
declare
@strWks varchar(3),
@dteIN datetime='2013.08.05 03:30',
@dteOUT datetime='2013.08.05 05:30',
@strShf varchar(12)=null,--'2013.08.04-3',
@strInd varchar(2) = 'WT',
@dteFTm datetime,
@dteShf date
[email protected] datetime,
[email protected] datetime
select top 1
@dteFTm =
case
when @strShf is not null
then (select shiftstart from tbl_ShiftSched where ShiftTmID=(select ShiftTiming from tbl_WorkStations where [email protected]) and shift=right(@strshf,1) and sortind=1)
else @dteIN-dateadd(day,datediff(day,0,@dteIN),0) --CAST(@dteIN-cast(floor(@dteIN) as float) as datetime)
end,
@dteShf=
case
when @strShf is not null
then left(@strShf,10)
else convert(varchar,dateadd(day,datediff(day,0,@dteIN),0),102)
end
--select @dteftm,@dteShf
SELECT tbl_ShiftSched.Shift,
tbl_ShiftSched.SortInd,
[ShiftStart]+
case
when @dteFTm>[shiftstart]
then DateAdd(day,1,@dteShf)
else @dteShf
end AS PrdS,
[ShiftEnd]+
case
when @dteFTm>[shiftend]
then DateAdd(day,1,@dteShf)
else @dteShf
end AS PrdE,
case
when @dteIN>=[PrdS] AND [PrdE]>[email protected]
then DateDiff(minute,@dteIN,@dteOUT)
else case
when @dteIN<=[PrdS] AND [PrdE]<[email protected]
then DateDiff(minute,[PrdS],[PrdE])
else case
when [PrdS]<[email protected] AND @dteIN<=[PrdE]
then DateDiff(minute,@dteIN,[Prde])
else case
when [PrdS]<[email protected] AND @dteOUT<=[PrdE]
then DateDiff(minute,[Prds],@dteOUT)
else 0
end
end
end
end AS Tm,
@dteIN AS S,
@dteOUT AS E,
tbl_ShiftSched.ShiftType,tbl_ShiftSched.ShiftStart,tbl_ShiftSched.ShiftEnd
FROM tbl_WorkStations
INNER JOIN tbl_ShiftSched ON tbl_WorkStations.ShiftTiming = tbl_ShiftSched.ShiftTmID
WHERE (((tbl_WorkStations.WksID)[email protected]))
當然,它給了我一個錯誤無效的列名'PrdS'和'PrdE',因爲我使用別名。
必須有一些更簡單的方法來實現它。也許我是在錯誤的方向?...
謝謝你,它仍然會產生對泄壓裝置同樣的錯誤,PrdE領域,所以我剛剛刪除的Tm場從代碼的第一部分和現在錯誤消失。儘管如此,它還是給我錯誤的結果,但它可能是不同的故事。 – litpost
你說得對,我應該從第一部分中刪除TM。以爲我有...... – steenbergh