Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 242
  • Last Modified:

sql query that filters on a related table

Hi

I have two tables that I need to make a report from, but I can't figure out the SQL.

Basically I want all rows from table SAPModules, and then add some fields from SAPSkills.
SAPModules lists all available choices, while SAPSkills lists the already chosen skills for each person.

The result should be a list of all the SAP modules available plus added data in those rows that exists in SAPSkills.

My problem starts when I want to filter those lists by PersonID in SAPSkills. How do I cange the SQL so that I can print out a list of all SAPModules, but only include the extra data from SAPSkills relevant for each individual person?

SELECT     SAPModules.Code + N' ' + SAPModules.Name AS SAPModule, SAPSkills.StartDate, SAPSkills.EndDate, SAPSkills.PersonID
FROM         SAPSkills RIGHT OUTER JOIN
                      SAPModules ON SAPSkills.SAPModuleID = SAPModules.SAPModuleID
WHERE     (SAPSkills.PersonID = @PersonID)

TIA
Dennis
0
sgude0
Asked:
sgude0
  • 4
  • 4
2 Solutions
 
Raja Jegan RSQL Server DBA & ArchitectCommented:
This should do: (Just a rewrite using LEFT JOIN for easier reading)

SELECT SAPModules.Code + N' ' + SAPModules.Name AS SAPModule, SAPSkills.StartDate, SAPSkills.EndDate, SAPSkills.PersonID
FROM SAPModules
LEFT JOIN SAPSkills ON SAPSkills.SAPModuleID = SAPModules.SAPModuleID
WHERE (SAPSkills.PersonID = @PersonID)
0
 
Raja Jegan RSQL Server DBA & ArchitectCommented:
>> How do I cange the SQL so that I can print out a list of all SAPModules, but only include the extra data from SAPSkills relevant for each individual person?

Not sure on what you meant by Print out, kindly clarify
Also post some sample records to explain what you are trying to achieve.
0
 
sgude0Author Commented:
This still doesn't work, as I now only get records from SAPSkills with fields from SAPModules, I want it the other way around.

The fields in the resulting list should be like this:

1: SAPModules.Name (every line)
2: SAPSkills.StartDate (only if selected PersonID has one, else NULL)
2: SAPSkills.EndDate (only if selected PersonID has one, else NULL)

Re
Dennis
0
Become an Android App Developer

Ready to kick start your career in 2018? Learn how to build an Android app in January’s Course of the Month and open the door to new opportunities.

 
Raja Jegan RSQL Server DBA & ArchitectCommented:
>> WHERE (SAPSkills.PersonID = @PersonID)

Since you have this WHERE condition passed, your query would bring records only if you have records in SAPSkills table since PersonID is present in SAPSkills table alone.
Else it won't bring any records.
Can you kindly clarify your exact requirements..
0
 
sgude0Author Commented:
OK, I think I understand that problem. Let's do it step by step ;-)

The following statement gets the list I want:

SELECT     Code + N' ' + Name AS SAPModule
FROM         SAPModules

I will give each employee this list (to update their CV's). However, since most employees have already registered skills in the past, this information should be added to their list so they dont have to re-do the registration, just update the new stuff they've learned since the last registration.

I've included an Excel sheet with the basic data.

Re
Dennis


SkillsUpdate.xls
0
 
Raja Jegan RSQL Server DBA & ArchitectCommented:
Have gone through the data in Excel sheet and hope this is what you require.
SELECT t1.SAPModule, SAPSkills.StartDate, SAPSkills.EndDate, SAPSkills.PersonID
FROM (
SELECT DISTINCT Code + N' ' + Name AS SAPModule, SAPModuleID, @PersonID PersonID
FROM SAPModules) t1
LEFT JOIN SAPSkills ON t1.PersonID = SAPSkills.PersonID
AND SAPSkills.SAPModuleID = t1.SAPModuleID
WHERE SAPSkills.PersonID = @PersonID

Open in new window

0
 
sgude0Author Commented:
Nope, that still only shows the SAPModule rows that has SAPSkill rows, but I got the answer from MSDN. This does what I want:

SELECT     SAPModules.SAPModuleID, SAPModules.Name, SAPSkills.PersonID, SAPSkills.StartDate, SAPSkills.EndDate
FROM         SAPModules LEFT OUTER JOIN
                      SAPSkills ON SAPModules.SAPModuleID = SAPSkills.SAPModuleID AND SAPSkills.PersonID = @PersonID
0
 
sgude0Author Commented:
Thanks for the help though.
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 4
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now