J'ai l'instruction SQL/select suivante que je travaille sur la modification. Je tirais ce à partir d'une question précédente, j'avais qui peut être référencé ici: Need help with SQL queryComment rechercher des paires de valeurs dans cette procédure stockée SQL
Cela fonctionne assez bien quand je n'ai pas conditionnel à vérifier là depuis des années d'expérience, mais je veux réellement modifier cette façon que si je avoir une liste passée en @csvList
et une autre liste de @csvYears
, alors je peux appairer les valeurs - c'est, je peux rechercher Skill1
avec 5 ans d'expérience, et Skill2
avec 3 ans d'expérience.
Puis-je faire juste un autre JOIN sur la table de csvYears
? (La fonction SplitCSVStrings
retourne une table, et divise la liste CSV des valeurs)
voici donc le code existant:
ALTER PROCEDURE [dbo].[EmployeeQuerySkill]
@csvList varchar(400),
@years int,
@fudge int,
@hitAll int = 0
AS
BEGIN
SELECT last_name, id, name, SUM(Experience) AS 'YearsExperience'
FROM
(
SELECT e.last_name, e.id, s.name, CASE WHEN r.end_date ='01/01/1901' THEN MAX(datediff(YY,r.start_date, GETDATE())) ELSE MAX(datediff(YY,r.start_date, r.end_date)) END AS 'Experience'
FROM employee as e
INNER JOIN project AS p ON e.id = p.employee_id
INNER JOIN role AS r ON p.id = r.project_id
INNER JOIN role_skill AS rs ON rs.role_id = r.id
INNER JOIN skill AS s ON s.id = rs.skill_id
JOIN SplitCSVStrings(@csvList) AS CSV ON CSV.val = s.name
GROUP BY e.last_name, e.id, s.name, r.end_date
) table1
WHERE table1.Experience >= @years
GROUP BY last_name, id, name
END
END
Comment puis-je modifier cela pour me permettre de rechercher une condition différente pour chacun des les compétences? @csvList
arrive comme "C++, Java" et je veux @years
pour entrer comme "5, 3"
et la recherche correspondante pour me montrer les gens qui ont 5 ans d'expérience C++, et 3 ans d'expérience Java.
Merci!
Le regroupement est-il correctement configuré pour cela? J'ai changé votre ligne en CSV2.val en tant que 'Years' et ajouté 'Years' au groupe par et je ne pouvais toujours pas le faire fonctionner tout à fait – Derek
vous avez raison, désolé, le regroupement était erroné. Je l'ai corrigé maintenant, donc ça devrait marcher – Lamak