Ежемесячный отчет SQL из существующих таблиц работником
Нужно починить этот код для ежемесячного отчета
Радник - рабочий
Vrijemeprijave это дата и время приходите на работу,
Vrijemeodjave это конец работы
Что я уже пробовал:
SELECT [radnik] as Radnik,SUM(cast((CASE WHEN DATEPART(WEEKDAY, vrijemeprijave) in (1, 7) then 0 else (CASE WHEN(DATEDIFF(SECOND, vrijemeprijave, vrijemeodjave) / 3600) > 8 THEN 8 ELSE(DATEDIFF(SECOND, vrijemeprijave, vrijemeodjave) / 3600) END) end)as float)) AS radni_sati," + "SUM(cast((CASE WHEN DATEPART(WEEKDAY, vrijemeodjave) in (1, 7) then(DATEDIFF(SECOND, vrijemeprijave, vrijemeodjave) / 3600) else(case when(DATEDIFF(SECOND, vrijemeprijave, vrijemeodjave) / 3600) > 8 then((DATEDIFF(SECOND, vrijemeprijave, vrijemeodjave) / 3600) - 8) ELSE NULL END) end)as float)) AS 'Prekovremeni'" + "from[prijava_radnika]" + "group by[radnik]";
Jörgen Andersson
А что случилось?
CHill60
Дайте нам схемы таблиц, некоторые примеры данных и некоторые ожидаемые результаты или, по крайней мере, объясните, что должны показать результаты. Невероятно трудно распутать эти заявления по делу (которые, как я подозреваю, не требуются)
CHill60
Некоторые другие моменты:
1) Зачем использовать DATEDIFF(SECOND, Vrijemeprijave, Vrijemeodjave) / 3600 вместо DATEDIFF(MINUTE, Vrijemeprijave, Vrijemeodjave) ?
2) Зачем бросать сумму как поплавок - это кажется бессмысленным
3) Зачем убирать 8 минут из объема проделанной работы за Прековремени?
4) вы действительно имеете в виду NULL в этой части вместо 0? Быть последовательным
Goran Bibic
Опубликуйте мой код...создайте какой-нибудь исправленный код, например...мне нужна помощь...спасибо
1) это нормально для меня...некоторые recomantidiot?
2)сумма...что использовать?
3) не 8 минут, а 8 часов...работа 13 часов...8 - это нормально, 13-8= 5 - это сверхурочно
4)Да...нуль...мне не нужен 0...Или я могу использовать 0 becose из суммы часов
Мне нужна помощь для лучшего решения
CHill60
1 - это кажется излишним, тем более что расчет все равно приведет только к целым часам. Если вы хотите записать неполные часы вам нужно будет использовать / 3600.0
2 - Не бросайте вообще
3 - мои извинения, я неправильно понял код.
4 - Поскольку вы вводите значение в сумму, а не в счет, то вам было бы лучше использовать 0 вместо нуля.
Теперь когда я знаю в чем на самом деле проблема я пойду и посмотрю на это
Goran Bibic
Подобный этому...
ошибка-Msg 156, Уровень 15, состояние 1, строка 13
Неверный синтаксис рядом с ключевым словом "группа".
Выберите.Радник, функция isnull(конвертировать(тип varchar(20), на.vrijemeodjave, 113), ") как vrijemeodjave, конвертировать(тип varchar(20), б.vrijemeprijave, 113), а vrijemeprijave,
--Случай, когда функция datepart(будний день, б.vrijemeprijave) в (1,7) тогда 0 иначе (случай, когда (функция datediff(во-вторых, б.vrijemeprijave, а.vrijemeodjave) / 3600) &ГТ; 8 и 8 еще(функция datediff(во-вторых, б.vrijemeprijave, а.vrijemeodjave) / 3600) конец) конец как radni_sati,
--Случай, когда функция datepart(день недели, а.vrijemeodjave) в (1,7) затем (функция datediff(во-вторых, б.vrijemeprijave, а.vrijemeodjave) / 3600) другой(случай, когда(функция datediff(во-вторых, б.vrijemeprijave, а.vrijemeodjave) / 3600) &ГТ; 8 лет ((функция datediff(во-вторых, б.vrijemeprijave, а.vrijemeodjave) / 3600)-8) еще null конец) конец как prekovremeni
Сумма(бросание((случай, когда функция datepart(будний день, 01), в (1, 7) тогда 0 иначе (случай, когда(функция datediff(второе, 01, 3) / 3600) &ГТ; 8 и 8 еще(функция datediff(второе, 01, 3) / 3600) конец) конец)как поплавок)) Как укупно_радни_сати,
Сумма(бросание((случай, когда функция datepart(день, 3) в (1, 7) затем(функция datediff(второе, 01, 3) / 3600) другой(случай, когда(функция datediff(второе, 01, 3) / 3600) &ГТ; 8 лет((функция datediff(второй, 01, 3) / 3600) - 8) еще null конец) конец)как поплавок)) Как rekovremeni Ukupno'
Из(выбрать Радник vrijemeodjave, функции row_number() над(раздел по заказу IdPrijava по vrijemeprijave) как параметр rownum
От dbo.prijava_radnika) а внутреннее соединение(выбрать Радник vrijemeprijave, (функции row_number() над(раздел по заказу IdPrijava по vrijemeprijave) - 1) Как RowNumMinusOne от dbo.prijava_radnika)
группа А. радника