-2

Location_table:

Locid   Locname
--------------
8       Blooimng dale

LocVtypeAssign_tbl:

locid       vtid
----------- -----------
8           7
8           8

Transaction_tbl:

transactID   Locid   vtid  dtime                       Paydate
---------    -----   ----  -----------------------     ----------------------    
7497         8       7     2013-06-28 14:39:34.000     2013-06-28 18:28:20.000
7500         8       8     2013-06-28 14:41:57.000     NULL

Locid 8 を渡すと、vtid 7 と vtid 8 の日付の差の合計を取得する方法がわかりました。次の式を使用して日付の差を見つけています。

sum(DATEDIFF(hour,t.Paydate,t.DelDate))

期待される出力:

location        datediff of 7       datediff of 8
Blooming Dale   2206:30321:73242    235:3373:56915

この出力を取得するためのストアド プロシージャを作成する方法はありますか?

私は次のようなクエリを試しました:

SELECT convert(varchar(10),sum(DATEDIFF(hour,t.Paydate,t.DelDate)))+':' 
      +convert(varchar(10),sum(DATEDIFF(minute,t.Paydate,t.DelDate)% 60)) + ':' 
      +convert(varchar(10),sum(DATEDIFF(SECOND,t.Paydate,t.DelDate)% 60)) 
       AS ' HH:MM:SS'
FROM Transaction_tbl t 
WHERE t.Locid=8 group by vtid

次のような出力が得られます。

HH:MM:SS
----------------
2206:30321:73242
235:3373:56915
4

1 に答える 1

0

次のようなことを試すことができます。

SELECT l.Locname AS location,
  convert(varchar(10),sum(DATEDIFF(hour,t7.Paydate,t7.DelDate)))+':' 
  + convert(varchar(10),sum(DATEDIFF(minute,t7.Paydate,t7.DelDate)% 60)) + ':' 
  + convert(varchar(10),sum(DATEDIFF(SECOND,t7.Paydate,t7.DelDate)% 60)) 
  AS 'datediff of 7',
  convert(varchar(10),sum(DATEDIFF(hour,t8.Paydate,t8.DelDate)))+':' 
  + convert(varchar(10),sum(DATEDIFF(minute,t8.Paydate,t8.DelDate)% 60)) + ':' 
  + convert(varchar(10),sum(DATEDIFF(SECOND,t8.Paydate,t8.DelDate)% 60)) 
  AS 'datediff of 8'
FROM Location_tbl l
JOIN Transaction_tbl t7
ON t7.locid = l.locid AND t7.vtid = 7
JOIN Transaction_tbl t8
ON t8.locid = l.locid AND t8.vtid = 8
WHERE l.Locid = 8

これを異なる一連の datediff オフセットに一般化することは、読者の課題として残されています。PIVOTも確認できます。

于 2013-07-18T12:59:50.397 に答える