【问题标题】:How to make total?怎么算总数?
【发布时间】:2009-10-02 13:29:50
【问题描述】:

使用 SQLSERVER 2000

银泰价值如何计算

Table 1
    InTime
    02:00:48
    22:00:22
    .....,

Intime 数据类型为 varchar

02:00:12 - (HH:MM:SS)

在我尝试访问 2003 之前

select format( Int(24*sum(Intime)), '0') & format( sum(Intime) , ':ss' ) AS totaltime from table1

Above Query 在 Access 2003 中完美运行

如何在sql中制作银泰总数?

预期输出

Intime

24:01:00

等等……,

需要查询帮助

【问题讨论】:

  • 你确定 inTime 是一个 varchar 吗?如果有,你怎么总结?
  • 在我在 Access 中进行总计(intime)之前,现在它正在工作。我如何在Sql中制作总共intime
  • 我认为正确的结果应该是 24:01:10,除非你打算总是四舍五入到最接近的分钟(48 + 22 = 70 秒)...

标签: sql sql-server tsql sql-server-2000


【解决方案1】:

试试这个:

CREATE TABLE #Table1
(
inTime varchar(8)
)

SET NOCOUNT ON
INSERT INTO #Table1 VALUES('02:00:48')
INSERT INTO #Table1 VALUES('22:00:22')
SET NOCOUNT OFF


SELECT
    CONVERT(varchar(2),TotalSeconds/3600)
        +':'
        +RIGHT('00'+CONVERT(varchar(2),(TotalSeconds-(TotalSeconds/3600*3600))/60),2)
        +':'
        +RIGHT('00'+CONVERT(varchar(2),TotalSeconds-((TotalSeconds/3600*3600)+(((TotalSeconds-(TotalSeconds/3600*3600))/60)*60))),2) AS Answer
        ,DATEADD(second,dt.TotalSeconds,CONVERT(datetime,'1/1/1900')) AS AnswerIncrementingDays

    FROM (SELECT
              SUM(DATEDIFF(second,CONVERT(datetime,'1/1/1900'),CONVERT(datetime,'1/1/1900 '+inTime))) AS TotalSeconds
              FROM #Table1
         ) dt

输出:

Answer   AnswerIncrementingDays
-------- -----------------------
24:01:10 1900-01-02 00:01:10.000

(1 row(s) affected)

【讨论】:

  • 现在得到正确的时间,但为什么查询比 Access 长这么多。有任何其他相关查询可用。
【解决方案2】:
select right('0' + cast(TotalHours + TotalMinutes / 60 as varchar), 2) + ':' + right('0' + cast(TotalMinutes % 60 as varchar), 2) + ':' + right('0' + cast(Seconds as varchar), 2)
from (
    select TotalHours, TotalMinutes + TotalSeconds / 60 as TotalMinutes, TotalSeconds % 60 as Seconds
    from (
        select 
            TotalHours = SUM(cast(substring(a, 1, 2) as int)),
            TotalMinutes = SUM(cast(substring(a, 4, 2) as int)),
            TotalSeconds = SUM(cast(substring(a, 7, 2) as int))
        from (
            select '02:00:48' a
            union
            select '22:00:22'
        ) a
    ) b
) c

【讨论】:

  • 更新:添加了前导零。
猜你喜欢
  • 2017-01-16
  • 1970-01-01
  • 2018-06-16
  • 2013-01-15
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多