1

テーブルT1とT2があります。

T1

ID    TIME1    TIME2  
1001    1        10
1002    1        20

T2

ID        STATUS    TIME
1001      NEW         1
1001      CLOSED      10
1002      NEW         1
1002      HOLD        5
1002      CLOSED      13

ステータスHOLDがテーブルT2に存在しない場合、結果TIME2-TIME1が必要です。または、ステータスHOLDがそのレコードのテーブルに存在する場合はTIME2-TIME1-TIME

1001   9 (10-1)
1002   14(20-1-5)

最初にSQLクエリを作成しましたが、最初のレコードではNULLが返され、2番目のレコードの結果はOKであるため、これは機能しません。

SELECT T1.ID,T1.TIME2-T1.TIME1-T2.TIME
FROM T1
LEFT OUTER JOIN T2 ON T1.ID=T2.ID AND T2.STATUS='HOLD'

ありがとう

4

3 に答える 3

1
SELECT T1.ID
    , Case 
            When T2.STATUS = 'HOLD' THEN T1.Time2 - T1.Time1 - T2.Time 
            Else T1.Time2 -T1.Time1 
      END
FROM T1
LEFT OUTER JOIN T2 ON T1.ID=T2.ID AND T2.STATUS='HOLD'
于 2012-07-13T09:51:28.510 に答える
1

明らかに、テーブルT2には、 T1.IDに一致する複数の行が含まれている可能性があります。T2に常にそのような行が少なくとも1つ含まれていると仮定すると、次のことができます。

select T1.ID, min(case when T2.STATUS<>'HOLD' then T1.TIME2-T1.TIME1 
when T2.STATUS='HOLD' then  T1.TIME2-T1.TIME1-T2.[TIME] end)
from T1   join  T2 
on T1.ID=T2.ID
group by T1.ID
于 2012-07-13T10:13:08.907 に答える
1

または要するに

select 
    t1.id,
    t1.time2-case when status='HOLD' then t2.time else 0 end-t1.time1
from
    t1 left join t2 on t1.id=t2.id and t2.status='HOLD'
于 2012-07-13T10:18:08.503 に答える