Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 SQL Server 2005 Forums
 Transact-SQL (2005)
 Stored Procedure Problem

Author  Topic 

swathigardas
Posting Yak Master

149 Posts

Posted - 2008-11-04 : 03:01:26
I have tables Employee_skill, Skill_level, Skill, Employee, Title, Title_Skill


Employee_skill

Skill_NBR Employee_nbr supervisor rating Date
1 1 3 01/01/2007
2 1 4 08/01/2007
3 5 2 02/10/2007
2 2 4 02/10/2007
5 2 3 02/10/2007
5 3 4 25/10/2008
5 1 5 25/10/2008
7 1 3 25/10/2008

Skill_level
Number Name
1 No Experience
2 Beginner
3 Intermediate
4 Proficient
5 Expert

Skill
Number Name
1 .Net
2 SQL server
3 Java
4 Manual Testing
12 Siebel
5 oracle
6 XML
7 sybase

Employee

Number Name
1 Jhon
2 Smith
3 Vernoica
4 Sing
5 Sony


Title
Number Name
1 SQL DBA
2 DB programmer
3 .Net Programmer
4 Vb Programmer
5 Siebel Programmer

Title_Skill

Number Title_nbr Skil_nbr Skill_level_nbr
1 1 2 5
2 1 5 3
3 2 2 3
4 2 5 2
5 1 7 3



Title_skill table is used to enter skill required for a particular title

I need a stored procedure which would show the difference between title skills and employee skills. In the application they would have 3 radio buttons as – Show all , Show difference and Show Deficiencies

If they choose the employee name as jhon and title name as SQL DBA and select show all, the data should be displayed as follows

SkillName EmpCompetency condition Required competency
SQL Intermediate < Expert
Oracle Expert > Intermediate
Sybase Intermediate = Intermediate

If they choose the employee name as jhon and title name as SQL DBA and select show difference, the data should be displayed as follows

SkillName EmpCompetency condition Required competency
SQL Intermediate < Expert
Oracle Expert > Intermediate


If they choose the employee name as jhon and title name as SQL DBA and select show Deficiencies, the data should be displayed as follows

SkillName EmpCompetency condition Required competency
SQL Intermediate < Expert


Will this be done in one SP or three SP’s . because the condition should be generated from the SP right.

Hope I would get help for this too

visakh16
Very Important crosS Applying yaK Herder

52326 Posts

Posted - 2008-11-04 : 04:22:59
you can incorporate this in single SP itself

CREATE PROC GetData
@Type varchar(30)
AS
IF @Type='All'
BEGIN
SELECT s.Name,
sl1.Name,
CASE WHEN sl1.Number < sl.Number THEN '<'
WHEN sl1.Number > sl.Number THEN '>'
ELSE '='
END AS Condition,
sl.Name
FROM Employee_Skill es
INNER JOIN Skill s
ON s.Number=es.Skill_NBR
INNER JOIN Title_Skill ts
ON ts.Skill_NBR=s.Number
INNER JOIN Skill_level sl
ON sl.Number=ts.Skill_level_NBR
INNER JOIN Skill_level sl1
ON sl1.Number=es.rating
INNER JOIN Title t
ON t.Number=ts.Title_NBR
INNER JOIN EMployee e
ON es.Employee_nbr=e.Number
WHERE e.Name='Jhon'
AND t.Name='DBA'
END
IF @Type='difference'
BEGIN
SELECT s.Name,
sl1.Name,
CASE WHEN sl1.Number < sl.Number THEN '<'
WHEN sl1.Number > sl.Number THEN '>'
ELSE '='
END AS Condition,
sl.Name
FROM Employee_Skill es
INNER JOIN Skill s
ON s.Number=es.Skill_NBR
INNER JOIN Title_Skill ts
ON ts.Skill_NBR=s.Number
INNER JOIN Skill_level sl
ON sl.Number=ts.Skill_level_NBR
INNER JOIN Skill_level sl1
ON sl1.Number=es.rating
INNER JOIN Title t
ON t.Number=ts.Title_NBR
INNER JOIN EMployee e
ON es.Employee_nbr=e.Number
WHERE e.Name='Jhon'
AND t.Name='DBA'
AND sl.Number <> sl1.Number
END
IF @Type='deficiency'
BEGIN
SELECT s.Name,
sl1.Name,
CASE WHEN sl1.Number < sl.Number THEN '<'
WHEN sl1.Number > sl.Number THEN '>'
ELSE '='
END AS Condition,
sl.Name
FROM Employee_Skill es
INNER JOIN Skill s
ON s.Number=es.Skill_NBR
INNER JOIN Title_Skill ts
ON ts.Skill_NBR=s.Number
INNER JOIN Skill_level sl
ON sl.Number=ts.Skill_level_NBR
INNER JOIN Skill_level sl1
ON sl1.Number=es.rating
INNER JOIN Title t
ON t.Number=ts.Title_NBR
INNER JOIN EMployee e
ON es.Employee_nbr=e.Number
WHERE e.Name='Jhon'
AND t.Name='DBA'
AND sl.Number < sl1.Number
END
GO
Go to Top of Page

PeterNeo
Constraint Violating Yak Guru

357 Posts

Posted - 2008-11-04 : 04:41:26
try this
DECLARE @EmployeeName VARCHAR(MAX)
DECLARE @TitleName VARCHAR(MAX)
DECLARE @Filter INT

SELECT @EmployeeName = 'Jhon',
@TitleName = 'SQL DBA'

SELECT @Filter = 1 -- Show ALl
-- 2 -- Show Difference
-- 3 -- Show Deficiencies

SELECT E.Skill, E.Level AS 'EmpCompetency',
CASE WHEN E.LevelNo < T.LevelNo THEN '<'
WHEN E.LevelNo = T.LevelNo THEN '='
ELSE '>' END AS 'Condition',
T.Level AS 'Required competency'
FROM (
SELECT ES.Skill_Nbr, S.Name 'Skill', ES.Employee_Nbr, E.Name AS 'Emp', SL.Name 'Level', SL.Number 'LevelNo'
FROM @Employee_skill ES
INNER JOIN @Skill S ON S.NUmber = ES.Skill_Nbr
INNER JOIN @Employee E ON E.Number = ES.Employee_Nbr
INNER JOIN @Skill_level SL ON SL.Number = ES.supervisorrating
WHERE E.Name = @EmployeeName
) E
INNER JOIN
(
SELECT TS.Skill_Nbr, S.Name 'Skill', TS.Title_nbr, T.Name AS 'Title', SL.Name 'Level', SL.Number 'LevelNo'
FROM @Title_Skill TS
INNER JOIN @Skill S ON S.NUmber = TS.Skill_Nbr
INNER JOIN @Title T ON T.Number = TS.Title_nbr
INNER JOIN @Skill_level SL ON SL.Number = TS.Skill_level_nbr
WHERE T.Name = @TitleName
) T ON T.Skill_Nbr = E.Skill_Nbr
WHERE ( @Filter = 1
OR ( @Filter = 2 AND E.LevelNo <> T.LevelNo )
OR ( @Filter = 3 AND E.LevelNo < T.LevelNo ))


"There is only one difference between a dream and an aim. A dream requires soundless sleep to see, whereas an aim requires sleepless efforts to achieve..!!"
Go to Top of Page

swathigardas
Posting Yak Master

149 Posts

Posted - 2008-11-04 : 11:30:19
Hey thanks a lot vishakh and peter..
Wil get back if i encounter any problem in that SP

Thanks
Go to Top of Page

visakh16
Very Important crosS Applying yaK Herder

52326 Posts

Posted - 2008-11-04 : 11:34:22
Cheers
Go to Top of Page
   

- Advertisement -