Как рассчитать общий опыт из таблицы ExperienceHistory на сервере SQL? - PullRequest
1 голос
/ 25 марта 2019

Я использую S_ResumeWorkHistory таблицу и храню данные типа

CREATE TABLE S_ResumeWorkHistory (
    ResumeID int,
    FromMonth int,
    FromYear int,
    ToMonth int,
    ToYear int,
    CurrentlyWorking varchar(1)
)

INSERT INTO S_ResumeWorkHistory
    (ResumeID, FromMonth, FromYear, ToMonth, ToYear, CurrentlyWorking)
VALUES 
    (17, 6,  2015, 10, 2016, 'N'),
    (17, 10, 2016, -1,   -1, 'Y')

Я хочу всего опыта, как

ResumeId, Experience

17, 3 года 3 месяца

Я пробовал этот запрос

select 
    SUM(convert(int,DATEDIFF(MONTH, FromMonth+'/1/'+FromYear, (CASE CurrentlyWorking WHEN 'N' THEN ToMonth+'/1/'+ToYear ELSE GETDATE() END))/12)),
    SUM(convert(int,DATEDIFF(MONTH, FromMonth+'/1/'+FromYear, (CASE CurrentlyWorking WHEN 'N' THEN ToMonth+'/1/'+ToYear ELSE GETDATE() END)) % 12))
FROM S_ResumeWorkHistory 

Спасибо за вашу помощь.

1 Ответ

4 голосов
/ 25 марта 2019

Если я понимаю ваш вопрос, вы можете попробовать следующий подход.Сначала получите разницу между датами и датами, используя DATEFROMPARTS() и DATEDIFF(), а затем рассчитайте эту разницу как годы и месяцы.

Ввод

CREATE TABLE S_ResumeWorkHistory (
    ResumeID int,
    FromMonth int,
    FromYear int,
    ToMonth int,
    ToYear int,
    CurrentlyWorking varchar(1)
)
INSERT INTO S_ResumeWorkHistory
    (ResumeID, FromMonth, FromYear, ToMonth, ToYear, CurrentlyWorking)
VALUES 
    (17, 6,  2015, 10, 2016, 'N'),
    (17, 10, 2016, -1,   -1, 'Y')

Выписка

;WITH MonthsCTE AS (
    SELECT 
        ResumeId,
        CASE 
            WHEN CurrentlyWorking = 'N' THEN DATEDIFF(month, DATEFROMPARTS(FromYear, FromMonth, 1), DATEFROMPARTS(ToYear, ToMonth, 1))
            ELSE DATEDIFF(month, DATEFROMPARTS(FromYear, FromMonth, 1), GETDATE())
        END AS Months
    FROM S_ResumeWorkHistory
)
SELECT
    ResumeId,
    (CONVERT(nvarchar(100), SUM(Months) / 12)) + ' years, ' +
    (CONVERT(nvarchar(100), SUM(Months) % 12)) + ' months' AS Experience
FROM MonthsCTE
GROUP BY ResumeId

Выход

ResumeId    Experience
17          3 years, 9 months
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...