4

次の値を使用して旅行間の平均時間を計算する必要があるテーブルで作業しています。

Date        Clockin       CLockout        Trip1           Trip2
====        =======       ========        =====           ======
01/01/2013   13:00        17:00            3               3

これを試してみました。

(datediff(minute,[Clockin],[ClockOut])/case when [Trip1]=(0) then NULL else [Trip1] end+case when [Trip2]=(0) then NULL else [Trip2] end)

(datediff(minute,[Clockin],[ClockOut])/case when [Trip1]=(0) then 1 else [Trip1] end+case when [Trip2]=(0) then 1 else [Trip2] end)

目的は、旅行間の期間を計算することです。つまり、trip2がnullの場合は4時間/ 3トリップ、それ以外の場合は4時間/ 3 + 3(4時間/ 6トリップ)

しかし、上記は正しい結果を生み出していないようです。

どんな助けでもありがたいです。

4

3 に答える 3

2

トリップ合計0(nullの結果ですか?)をどのように処理するかに応じて、次の計算のいずれかが機能するはずです。

declare @t table ([Date] date, Clockin time, CLockout time, Trip1 int, Trip2 int)
insert into @t  

    select '01/01/2013', '13:00', '17:00', 3, 3 union all
    select '01/01/2013', '13:00', '17:00', 0, 3 union all
    select '01/01/2013', '13:00', '17:00', 0, 0 union all
    select '01/01/2013', '13:00', '17:00', 3, null;

select  [minutes]=datediff(mi, Clockin, Clockout), 
        [trips] = ((isnull(Trip1, 0)+isnull(Trip2,0))),
        [calc] = datediff(mi, Clockin, Clockout)/ (nullif((isnull(Trip1, 0)+isnull(Trip2,0)), 0)),
        [calc2] = datediff(mi, Clockin, Clockout)/ isnull((nullif((isnull(Trip1, 0)+isnull(Trip2,0)), 0)), 1)
from @t
于 2013-02-08T07:50:48.917 に答える
0
CASE WHEN trip2 IS NULL 
     THEN DATEDIFF(hour,[Clockin],[ClockOut]) / Trip1 
     ELSE (DATEDIFF(hour,[Clockin],[ClockOut]) / Trip1 + Trip2) 
        * (DATEDIFF(hour,[Clockin],[ClockOut]) + (Trip1 + Trip2)) 
END
于 2013-02-08T07:52:42.173 に答える
0

次のようなものを試してください。

SELECT 
  CONVERT(Decimal, DateDiff(hh,ClockIn,ClockOut)) / 
  CASE 
    WHEN Trip1 IS NULL AND Trip2 IS NULL THEN 1
    ELSE CONVERT(Decimal, (COALESCE(Trip1,0) + COALESCE(Trip1,0)))
  END as result
FROM YourTable

Trip1とTrip2の両方がNULLの場合、何が必要かわかりませんでしたが、代わりに1で除算するCASEステートメントを追加しました。

そして、これがフィドルです。

幸運を。

于 2013-02-08T07:54:06.933 に答える