Вот таблицы, которые у меня есть:
employee
-id
project
-id
-employee_id
role
-id
-project_id
-start_date
-end_date
role_skill
-id
-role_id
-skill_id
skill
-id
-name
Таким образом, у сотрудника есть много проектов, у проекта есть много ролей, у роли есть много ролей, а у роли есть навык
* 1005пытается запросить «Навык 1 с опытом работы не менее 10 лет и Навык 2 с опытом работы не менее 3 лет»
В тех случаях, когда опыт работы у сотрудника зависит от той роли, в которой сотрудникнавык в списке.
Запрос на поиск сотрудника, обладающего определенным навыком, не представляет проблемы, но как мне «оглянуться назад», когда я узнаю, что у него есть навык для подсчета количества лет опыта?
Спасибо!
Вот пример процедуры store, в которой есть текущий код:
PROCEDURE [dbo].[EmployeeQuerySkill]
@csvList varchar(400),
@years int,
@fudge int,
@hitAll int = 0
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @csvLength int
set @csvLength = (select count(*) from SplitCSVStrings(@csvList))
IF @csvLength > 0
BEGIN
if @hitAll=0 SET @csvLength = 0
SELECT distinct hits.attribHits as hits, id, last_name+', '+first_name AS emp_name, SUM(CAST(total_experience/12.0 as DECIMAL(5,2))) AS total_exp, labor_grade, title, ptype, @csvList AS pval FROM
(SELECT e.id, e.last_name, e.first_name, e.labor_grade, e.title, 'skill' AS ptype,
CASE WHEN r.end_date ='01/01/1901' THEN SUM(datediff(MM,r.start_date, GETDATE())) ELSE SUM(datediff(MM,r.start_date, r.end_date)) END AS total_experience
FROM [Skillsdb_dev].[dbo].[employee] AS e
JOIN [Skillsdb_dev].[dbo].[project] AS prj ON prj.employee_id = e.id
JOIN [Skillsdb_dev].[dbo].[role] AS r ON r.project_id = prj.id
JOIN [Skillsdb_dev].[dbo].[role_skill] AS rs ON rs.role_id = r.id
JOIN [Skillsdb_dev].[dbo].[skill] AS s ON s.id = rs.skill_id
JOIN SplitCSVStrings(@csvList) AS CSV ON CSV.val = s.name
GROUP BY e.id, e.last_name, e.first_name, e.labor_grade, e.title, r.end_date) total_aggregate
JOIN csvSkillAttribHits(@csvList) AS hits ON hits.empRecId = id
WHERE total_aggregate.total_experience >= ((@years * 12)-@fudge) AND hits.attribHits >= @csvLength
GROUP BY id, last_name, first_name, labor_grade, title, ptype,hits.attribHits
ORDER BY emp_name DESC
END
END
Это работает, пока я не попытаюсь добавить туда второй параметр, которыйчто такое csvList, так что я могу искать "Java, C ++", например