2015-01-30 2 views
0

У меня есть таблица с 2 столбцами:сумма 1 столбец и выбрать дату на другой колонке

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 плавать.

Мой 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 
+0

что тип 'столбца points'? Это номер или варчар? – rtruszk

ответ

2

Test Data

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 Тхо? 5 + 1.2 = 6.2

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

как я могу поставить 'как totpoints' перед OVER – Dodgeball

+0

Вы положили его после OVER. Я отредактировал ответ. –

1

Просто группа по:

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

'Ошибка преобразования типа данных varchar в float.' он возвращает эту ошибку – Dodgeball

+0

Каков тип данных KMRUN? Проверить обновленное заявление –

+0

Решение проблемы 'CAST' в правильном месте решает проблему. Но есть лучшее решение. См. Мой ответ. – rtruszk

0

Это не лучший выбор для хранения числовых значений в виде varchars. Если вы это сделаете, вам придется преобразовать их в числа в каждом запросе. И это не оптимально.

Поэтому вам необходимо преобразовать вашу колонку tu FLOAT. Затем вы можете просто позвонить по телефону

SUM(KMRUN) 

без литья.

Теперь ваш SUM(KMRUN) является конкатенация строк и дает результат как

1,2257