powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / сложить время в столбце (MS Reproting Services 2008)
4 сообщений из 4, страница 1 из 1
сложить время в столбце (MS Reproting Services 2008)
    #37856404
r12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
r12
Гость
Здравствуйте,
MS Reproting Services 2008, отчеты пишу в Report Builder 3.0

есть запрос:
приведу кусок...
Код: sql
1.
2.
3.
SELECT     	CONVERT(date, X.EnterTIME) AS EnterDATA, 
		CONVERT(time, X.EnterTIME) AS EnterTIME, 
		CONVERT(time, (X.EnterTIME - grafik.start)) AS opa



в графе "opa" (это время на сколько опоздал работник) - получается время - 00:15:23 и тому подобное.... 05:35:37

делаю группировку по работнику и хочу получить суммарное время опоздание по каждому работнику
для этого в группе, там где итог, пишу выражение =Sum(Fields!opa.Value)
конечно же он мне выводит какие то непонятные цифры :)
если добавить =CONVERT(time, Sum(Fields!opa.Value)) то выдает ошибку:
В выражении Value для фрагмент текста "Textbox39.Paragraphs[0].TextRuns[0]" содержится ошибка: [BC30108] 'CONVERT' is a type and cannot be used as an expression.

Подскажите как можно просуммировать время по колонке "opa". Время может быть в итоге и такого вида 107:35:33
...
Рейтинг: 0 / 0
сложить время в столбце (MS Reproting Services 2008)
    #37857810
Фотография user89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r12,

один из вариантов (из личного опыта)

Вместо
Код: sql
1.
CONVERT(time, (X.EnterTIME - grafik.start)) AS opa


сделать разницу в секундах, будет некое целое число:
Код: sql
1.
datediff(ss, grafik.start, X.EnterTIME) as opa


Просуммировать это целое число - без проблем.

А на экран вместо целого числа выводим в формате дни:часы:минуты:секунды
по формуле:
Код: sql
1.
=int(Fields!opa.Value/86400) &":"& int(Fields!opa.Value/3600) mod 24 &":"& int((Fields!opa.Value mod 3600)/60) &":"& Fields!opa.Value mod 60
...
Рейтинг: 0 / 0
сложить время в столбце (MS Reproting Services 2008)
    #37858392
r12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
r12
Гость
user89,
спасибо большое, все прекрасно работает :)
сделал вот так:
Код: sql
1.
,datediff(ss, CONVERT(time,grafik.start), CONVERT(time,X.EnterTIME)) as opa12


а вывожу вот так:
Код: sql
1.
= int(Sum(Fields!opa12.Value)/3600) &":"& int((Sum(Fields!opa12.Value) mod 3600)/60) &":"& Sum(Fields!opa12.Value) mod 60


это как раз как я и хотел :) (что бы были не дни, а именно часы)

и для проверки вот как:
Код: sql
1.
=int(Sum(Fields!opa12.Value)/86400) &"дней "& int(Sum(Fields!opa12.Value)/3600) mod 24 &":"& int((Sum(Fields!opa12.Value) mod 3600)/60) &":"& Sum(Fields!opa12.Value) mod 60
...
Рейтинг: 0 / 0
сложить время в столбце (MS Reproting Services 2008)
    #37858487
Klick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще от предшественников досталась такая функция:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Function SecsNToHSM(Secs As Integer) As String
	Dim AvgSecs
	Dim HourStr
	Dim MinStr
	Dim SecStr
	Dim N = 1

	SecsNToHSM = "00:00:00"
	If N > 0 Then
		AvgSecs = Round(Secs / N, 0)
		
		SecStr = CStr(AvgSecs Mod 60)
		If Len(SecStr) = 1 Then SecStr = "0" + SecStr
		
		MinStr = CStr(Int(AvgSecs / 60 Mod 60))
		If Len(MinStr) = 1 Then MinStr = "0" + MinStr
		
		HourStr = CStr(Int(AvgSecs / 3600))
		If Len(HourStr) = 1 Then HourStr = "0" + HourStr

		SecsNToHSM = HourStr + ":" + MinStr + ":" + SecStr
	End If
End Function


В Code отчета запихиваешь ее и, собственно, профит! Писанины меньше в разы получается.

Код: vbnet
1.
=Code.SecsNToHSM(бла-бла-бла)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / сложить время в столбце (MS Reproting Services 2008)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]