2011-07-12 52 views
0

我試圖從總分鐘數中計算小時數和分鐘數。我從另一個網站的代碼這一點,但第一部分似乎不工作:從T-SQL中總分鐘數中解析小時數和分鐘數

cast(TimeToAdd/60 as varchar) + ' hours ' + 
cast(TimeToAdd%60 as varchar) + ' minutes' as [Converted] 

隨着TimeToAdd價值75分鐘,答案應該是1小時15分鐘,但所有我得到的是0小時15分鐘。

以下是完整的SQL:

select pu.ProjectID, c.ClientName, p.ProjectTitle, sum(TimeToAdd) as TotalTime, 
cast(TimeToAdd/60 as varchar) + ' hours ' + 
cast(TimeToAdd%60 as varchar) + ' minutes' as [Converted] 
from dbo.ProjectUsers pu 
left join dbo.Projects p 
on pu.ProjectID = p.ProjectID 
left join dbo.ProjectTime pt 
on p.ProjectID = pt.ProjectID 
inner join dbo.Clients c 
on p.ClientID = c.ClientID 
where pu.StaffID = 3 
group by pu.ProjectID, c.ClientName, p.ProjectTitle, pt.TimeToAdd 

有什麼建議?

+1

使用此代碼得到的輸出結果如下:'select cast(75/60 as varchar)+ '小時'+ cast(75%60 as varchar)+'分鐘'作爲[轉換]'? –

+0

1小時15分鐘 – DarrylGodden

+0

你自相矛盾。 –

回答

2

使用子查詢,這樣你就可以通過名稱引用總結列:

select 
    *, 
    cast(TotalTime/60 as varchar) + ' hours ' + 
    cast(TotalTime%60 as varchar) + ' minutes' as [Converted] 
from (
    select 
    pu.ProjectID, 
    c.ClientName, 
    p.ProjectTitle, 
    sum(TimeToAdd) as TotalTime 
    from dbo.ProjectUsers pu 
    left join dbo.Projects p on pu.ProjectID = p.ProjectID 
    left join dbo.ProjectTime pt on p.ProjectID = pt.ProjectID 
    inner join dbo.Clients c on p.ClientID = c.ClientID 
    where pu.StaffID = 3 
    group by 
    pu.ProjectID, 
    c.ClientName, 
    p.ProjectTitle 
) s 
0

這個工作對我來說,如下圖所示:

DECLARE @TimeToAdd INT 

SET @TimeToAdd = 75 

DECLARE @Hours nvarchar(50) 
DECLARE @Minutes nvarchar(50) 

SELECT @Hours = CAST(@TimeToAdd/60 as nvarchar) + ' hours' 
SELECT @Minutes = CAST(@TimeToAdd%60 as nvarchar) + ' minutes' 

PRINT @Hours 
PRINT @Minutes 

輸出:

1 hours 
15 minutes 
0
select pu.ProjectID, c.ClientName, p.ProjectTitle, sum(TimeToAdd) as TotalTime, 
cast(FLOOR(sum(TimeToAdd)/60.0) as varchar) + ' hours ' + 
cast(sum(TimeToAdd)%60 as varchar) + ' minutes' as [Converted] 
from dbo.ProjectUsers pu 
left join dbo.Projects p 
on pu.ProjectID = p.ProjectID 
left join dbo.ProjectTime pt 
on p.ProjectID = pt.ProjectID 
inner join dbo.Clients c 
on p.ClientID = c.ClientID 
where pu.StaffID = 3 
group by pu.ProjectID, c.ClientName, p.ProjectTitle // please remove (I guess), pt.TimeToAdd