我有以下SQL過程/選擇語句,我正在修改。我從前面的問題中得出了這個問題,我可以在這裏參考:Need help with SQL query如何搜索此SQL存儲過程中的值對
當我沒有條件檢查多年的經驗,但我實際上想要修改這個以便如果我有一個清單通過@csvList
和另一個清單@csvYears
,然後我可以配對的價值 - 也就是說,我可以搜索Skill1
5年的經驗,並Skill2
3年的經驗。
我可以在csvYears
的桌子上再做一個JOIN嗎? (該SplitCSVStrings
函數返回一個表,並分割值的CSV列表)
所以看哪現有代碼:
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
如何修改這個讓我來搜索每一個不同的條件技能? @csvList
就像「C++,Java」一樣進來,我希望@years
作爲"5, 3"
和相應的搜索向我展示具有5年C++經驗和3年Java經驗的人。
謝謝!
分組設置是否正確?我將行改爲CSV2.val爲'年',並將'年份'添加到組中,但仍然無法讓它工作起來 – Derek 2010-11-24 18:39:51