如何从sql server的ExperienceHistory表中计算总经验?

时间:2019-03-25 12:52:33

标签: sql-server

我正在使用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,经验

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 个答案:

答案 0 :(得分:4)

如果我理解您的问题,则可以尝试以下方法。首先,使用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