Проблема в том, когда я делаю сумму общего времени, которое находится в поле varchar
Привет У меня есть поле varchar в таблице sql , которое хранит время (например, '04:10:28' в этом формате), я застрял в том, как я могу сделать сумму общего времени, некоторые другие таблицы, используемые в этом запросе. что следует добавить в мой запрос, чтобы исправить эту проблему
имя поля - =T.Tripduration для времени
После того как я выполняю свой запрос то появляется какая то ошибка msg
Msg 130, Level 15, State 1, Line 6<br /> Cannot perform an aggregate function on an expression containing an aggregate or a subquery.<br /> <br /> Completion time: 2020-06-01T17:53:25.2400562+05:30
Спасибо
Что я уже пробовал:
Я устал ниже запроса :
select O.OrgName,C.ClientName,V.vehicleregno,count(V.vehicleregno) as Trip_count, T.Tripduration, sum(DATEDIFF(DAY, t.TripStartDate, t.TripEnddate)+1)as [Days_onTrip], sum(case when t.UptimePer>100 then 100 else t.UptimePer end) /count(t.DeviceID )as UptimeDuringTrip , (25- sum(DATEDIFF(DAY, t.TripStartDate, t.TripEnddate)+1)) Truck_Idle_days ,'100' UptimeDuringIdling, --,SUM(CAST(CAST(DATEADD(MINUTE,SUM(DATEDIFF(MINUTE,'00:00:00',CAST(T.Tripduration AS TIME))),'00:00:00')AS TIME)AS VARCHAR(8)) SUM(cast(cast(dateadd(MINUTE,SUM(DATEDIFF(MINUTE, '00:00:00', cast(convert(varchar(20),T.Tripduration ) as time))),'00:00:00') as time) as varchar(8))) from tb_TripUptime t (nolock) INNER join Client C(nolock) on C.ClientID=t.ClientID INNER join Organization O (nolock) on O.OrgID=C.OrgID inner join Vehicle V(nolock) on V.VehicleID=t.VehicleID where O.OrgID =isnull(1,O.OrgID) and C.ClientID =isnull(null,C.ClientID) and t.vehicleid=isnull(null,t.vehicleid) and TripEndDate between '2020-05-01 00:00:00' and '2020-05-25 23:59:59' GROUP by O.OrgName,C.ClientName,V.vehicleregno,T.Tripduration
ZurdoDev
Это время, как время, дата-время, или varchar?
Member 10194266
время хранится в поле varchar то есть Tripduration
пример значения=2.07:53 в моей таблице
Richard MacCutchan
Затем вам нужно изменить свою базу данных, чтобы она хранилась в виде типа Time или DateTime. Хранение дат и времени в виде строк делает жизнь очень трудной для вас.
Member 10194266
Привет Ричард ,
Для этой таблицы я не могу изменить тип данных, есть ли другой вариант ?
Richard MacCutchan
Да, перепроектируйте свою базу данных. Как я уже сказал, Вы просто накапливаете проблемы на будущее, не используя правильные типы данных.
Member 10194266
Спасибо Ричард
Dave Kreskowiak
Сохраняя все ваши времена в строковом столбце вместо использования столбца даты/времени, вы гарантируете, что любая математика, которую вы делаете в этом столбце, потребует дополнительного времени для вычисления. Это связано с тем, что база данных должна выполнять преобразование для каждой строки, на которой вы пытаетесь выполнить математику. Чем больше строк у вас есть, тем больше времени займет математика. Вы добавляете ненужные накладные расходы на операцию.
Member 10194266
Спасибо Дэйв