将1列相加并在另一列上选择日期

时间:2015-01-30 08:13:08

标签: sql-server date datetime casting

我有一个包含2列的表:

date | points

数据:

2015-01-30 00:00:00.000  |    1.2
2015-01-29 00:00:00.000  |    2
2015-01-30 00:00:00.000  |    5
2015-01-27 00:00:00.000  |    7

我想根据point汇总date列。因此,如果我使用2015-01-30 00:00:00.000过滤日期,那么结果将如下所示:

2015-01-30 00:00:00.000  |    7.5

上面的记录应该是它的样子。

我有一个查询,但它返回

  

将数据类型varchar转换为float时出错。

我的SQL代码。

SELECT gpsdate, totkm
FROM (
  SELECT gpsdate,
     cast(cast(cast((SUM(KMRUN)) as float) as int) as nvarchar(50)) as totkm
     ,
     RANK() OVER(PARTITION BY gpsdate 
                 ORDER BY SUM(KMRUN) DESC) as R
 FROM view_tracklist_report
  GROUP BY gpsdate) as InnerQuery
 WHERE InnerQuery.R = 1

3 个答案:

答案 0 :(得分:2)

测试数据

CREATE TABLE #Test ([date] DATETIME, points FLOAT);

INSERT INTO #Test
    ([date], points)
VALUES
    ('2015-01-30 00:00:00.000', 1.2),
    ('2015-01-29 00:00:00.000', 2),
    ('2015-01-30 00:00:00.000', 5),
    ('2015-01-27 00:00:00.000', 7)

实际代码:不确定为什么它应该总和到7.5 tho? 5 + 1.2 = 6.2

SELECT DISTINCT [date], SUM(points) OVER(PARTITION BY [date]) AS TotPoints
FROM #Test

答案 1 :(得分:1)

只是分组:

Select gpsdate, Sum(CAST(KMRUN AS float)) as KMRUN
From view_tracklist_report
group BY gpsdate

答案 2 :(得分:0)

将数值存储为varchars不是一个好的选择。如果这样做,则必须在每个查询中将它们转换为数字。这不是最佳选择。

因此,您必须转换列tu FLOAT。然后你可以简单地调用

SUM(KMRUN)

没有任何演员。

现在你的SUM(KMRUN)正在连接字符串并给出结果

  

1.2257