у меня две таблицы
Person(id, birthdate)
а также
Workday(personid, date, hours)
И birthdate
, и date
имеют формат ГГГГММДД и хранятся в виде строк.
Мне нужен запрос, который возвращает таблицу, содержащую возраст человека (0, 1, 2...) и количество часов, которые этот человек отработал в этом году жизни (год будет включать месяц дня рождения человека).
Это то, что у меня есть до сих пор:
SELECT CONVERT(INT, SUBSTRING(w.date, 0, 7)) - CONVERT(INT, SUBSTRING(p.birthdate, 0, 7)) AS age, w.hours AS totalhours
FROM Person AS p INNER JOIN Workday AS w ON p.id = w.personid
WHERE (p.person = @id)
Это возвращает
Что мне нужно, так это для всех строк, где 0 ‹ age ‹ = 100, возраст должен быть равен 0, а общее количество часов в этих строках должно быть суммировано. Тогда для 100 ‹ возраст ‹= 200, возраст равен 1 и так далее...
Спасибо!
CASE
для установки возраста (0, 1 и т. д.), а затем используйтеGROUP BY
по возрасту, чтобы суммировать все часы - person demo   schedule 28.01.2015(1, 19890623)
, Рабочий день:(1, 19900412, 8)
- person player   schedule 28.01.2015CONVERT(CHAR, [date], 112)
- person David Faber   schedule 28.01.2015