2010-11-24 26 views
0

我有以下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經驗的人。

謝謝!

回答

3

我認爲你需要修改函數SplitCSVStrings這個工作。喲應該使它,它返回的表有一個額外的列表明在csv中的位置。例如,如果該參數是「C++,Java的」,結果應該是:

id val 
1 C++ 
2 Java 

如果你這樣做,那麼你可以修改您的查詢是這樣的:

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', CSV2.val Years 
     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 
     LEFT JOIN SplitCSVStrings(@years) AS CSV2 ON CSV.id = CSV2.id 

    GROUP BY e.last_name, e.id, s.name, r.end_date, CSV2.val 
) table1  
    WHERE table1.Experience >= years 
    GROUP BY last_name, id, name 

    END 
END 

在任何請注意,在@csvlist和@years中傳遞的參數是相同的。

+0

分組設置是否正確?我將行改爲CSV2.val爲'年',並將'年份'添加到組中,但仍然無法讓它工作起來 – Derek 2010-11-24 18:39:51

相關問題