从datagridview重新计算字段

时间:2011-11-15 12:24:40

标签: c# sql visual-studio timespan

我在Windows窗体中有一个基于以下查询的datagridview:

select dbo.doss.behdr, dbo.doss.dosno, SUM(dbo.kbpres.uur) as SomUur, SUM(dbo.kbpres.minuut) as SomMinuut 
FROM dbo.kbpres INNER JOIN dbo.doss ON dbo.kbpres.ino = dbo.doss.ino 
WHERE (dbo.doss.behdr LIKE @cboBeheerder) 
GROUP BY dbo.doss.behdr, dbo.doss.dosno

现在,字段uur和minuut只是整数。所以它可能发生uur = 4和minuut = 140。现在我希望在一个额外的专栏中说明这一点,它是6:20:00,即4小时加上140分钟(2小时20分钟)。

我可以在sql查询中执行此操作,或者如何执行该programmaticaly ??

3 个答案:

答案 0 :(得分:1)

您可以这种方式获得此值,

SELECT (4*60 + 140) / 60 as hours,  (4*60 + 140) % 60 as minutes

您可以选择附加它并显示为文本,或者通过代码将其作为属性处理,因为您将定义其他字段。

答案 1 :(得分:1)

返回多行的行转换...

(我徒手打字,所以你可能需要做一些语法更新)

select 
   dbo.doss.behdr
,  dbo.doss.dosno
,  SUM(dbo.kbpres.uur) as SomUur
,  SUM(dbo.kbpres.minuut) as SomMinuut 
,  CAST ((SUM(dbo.kbpres.uur) + SUM(dbo.kbpres.minuut) / 60) AS Varchar(2)) + -- derives hour
   ':' + -- adds the ':'
   CAST ((SUM(dbo.kbpres.minuut) % 60) AS Varchar(2)) as [derivedColumn] -- derives the minutes

FROM 
   dbo.kbpres 
   INNER JOIN 
   dbo.doss ON dbo.kbpres.ino = dbo.doss.ino 

WHERE 
   (dbo.doss.behdr LIKE @cboBeheerder) 

GROUP BY 
   dbo.doss.behdr, dbo.doss.dosno

答案 2 :(得分:0)

您可以将uur和minuut值保存在变量中。然后将其制定。

declare @hr int
declare @mint int
set @hr = SUM(dbo.kbpres.uur)
set @mint  = SUM(dbo.kbpres.minuut)

SELECT (@hr*60 + @mint) / 60 as hours,  (@hr*60 + @mint) % 60 as minutes

我认为这将解决问题请检查