Как создать вычисляемое поле с предложением where в расчете - PullRequest
0 голосов
/ 11 июня 2019

На рисунке показана таблица из этого кода: выберите * из PunchClock где punchmonth = 1 и PunchDay = 1 и PunchYear = 2018

Я пытаюсь рассчитать количество часов, отработанных в день в базе данных. Наша таблица для этого имеет 2 столбца, которые относятся к этому. InOut - это столбец, который имеет 1 или 0 (1 = punch in, 0 = punch out), а затем есть время punchdate. Как я могу использовать эти два поля, чтобы вычислить, сколько часов работает в день.

Я пытался вычесть время удара из времени ожидания, но это не сработает.

select PunchMonth, PunchDay, PunchYear, 
      ((PunchDateTime where InOut = 0) - (punchdatetime where InOut = 1))
  from PunchClock

Сообщение об ошибке: неверный синтаксис рядом с ключевым словом «где».

Ответы [ 2 ]

1 голос
/ 11 июня 2019

может быть вам нужен случай (не где)

select PunchMonth
  , PunchDay
  , PunchYear
  , case INOut = 0 then PunchDateTime else -PunchDateTime end
from PunchClock
0 голосов
/ 11 июня 2019

Я думаю, вы хотите выражение case.Кроме того, поскольку данная строка имеет либо InOut значение 0 или 1, но не оба, я думаю, что вам нужно агрегирование.

Итак, я предполагаю:

select PunchMonth, PunchDay, PunchYear,
       datediff(second, min(case when InOut = 0 then punchdatetime end),
                max(case when InOut = 1 then punchdatetime  end)
               ) as seconds_diff
from PunchClock
group by PunchMonth, PunchDay, PunchYear;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...