【发布时间】:2010-11-24 17:56:25
【问题描述】:
我正在修改以下 SQL 过程/选择语句。我从之前的一个问题中得出这个,可以在这里引用:Need help with SQL query
当我没有条件检查多年的经验时,这非常有效,但我实际上想修改它,以便如果我有一个通过@csvList 的列表和另一个@csvYears 的列表,那么我可以将值配对 - 也就是说,我可以搜索具有 5 年经验的 Skill1 和具有 3 年经验的 Skill2。
我可以在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 经验的人。
谢谢!
【问题讨论】:
标签: sql sql-server-2005 select