0

I have a stored procedure like :

ALTER procedure [dbo].[IBS_Podiumsummryaveragetime]
@locid integer=null
as 
begin
set nocount on;
select  avg( datediff(mi,t.dtime, t.DelDate )) as Avgstaytime,
 avg( datediff(mi,t.dtime, t.PAICdate )) as  Avgparkingtime, 
 avg( datediff(mi,t.Paydate, t.DelDate )) as AvgDelivarytime 
 from (select top 10 * from transaction_tbl where locid=@locid and dtime >= getdate()-7 order by transactID desc ) t  
 end

if average time i am getting more than 60 minutes then i want to show in hours..how i can do this?
any help is appreciable??

user3106114
  • 183
  • 2
  • 11
  • 31

2 Answers2

1

I couldn't type this in the comments so I've added it as an answer:

SELECT 
   CASE 
      WHEN avg( datediff(mi,t.dtime, t.DelDate )) <= 60 
          THEN CAST(avg( datediff(mi,t.dtime, t.DelDate )), varchar)
      ELSE 
          CAST(avg( datediff(mi,t.dtime, t.DelDate )) / 60, varchar) + ":" + CAST(avg( datediff(mi,t.dtime, t.DelDate )) % 60, varchar)
   END 
1

Variations on @I.K.'s theme's (which I up voted)

SELECT CASE WHEN avg(datediff(mi,t.dtime, t.DelDate)) > 60 
            THEN CAST(avg(datediff(mi,t.dtime, t.DelDate))/60 AS VARCHAR(3)) + ':' 
            ELSE ''
       END
       + CAST(avg(datediff(mi,t.dtime, t.DelDate)) % 60  AS VARCHAR(2)) 

--OR

SELECT CASE WHEN avg(datediff(hour,t.dtime, t.DelDate)) > 0 
            THEN CAST(avg(datediff(hour,t.dtime, t.DelDate)) AS VARCHAR(3)) + ':' 
            ELSE ''
       END
       + CAST(avg(datediff(mi,t.dtime, t.DelDate)) % 60  AS VARCHAR(2)) 
Karl Kieninger
  • 8,841
  • 2
  • 33
  • 49