2017-08-18 24 views
0

我试图在SSRS中为数据集编写查询。我有一个连接表中调用RequestSchools其链接到其他三个表:带有多个where语句的SQL查询

  1. 学校
  2. 配售请求
  3. RequestSchoolType

我想要得到的RequestedSchool (RequestedSchoolTypeId = 3)

我的名字还想要名称CatchmentSchool (RequestSchoolTypeId = 1)

我附加了SQL查询的图像,可以与所请求的学校一起工作。我也想要流派学校。感谢任何帮助。

SELECT 
    pr.PlacingRequestId, s.Name AS RequestedSchool 
FROM 
    PlacingRequests AS pr 
INNER JOIN 
    RequestSchools AS rs ON rs.PlacingRequestId = pr.PlacingRequestId 
JOIN 
    Schools s ON s.SchoolId = rs.SchoolId 
WHERE 
    rs.RequestSchoolTypeId = 3 

SQL Query with results

+1

你可以粘贴你的SQL查询在你的文章,这将是有益的! –

+0

请将实际代码粘贴到问题中,而不是图片。另外,查看数据库模式将使它更容易理解。 – ADyson

+1

不知道我明白这个问题,但'rs.RequestSchoolTypeId = 3或rs.RequestSchoolTypeId = 1'做你想要的吗? –

回答

0

我不是100%肯定这是正确的,因为我们不能看到的模式,源数据或所期望的输出的完整的例子,但我认为这可能是它:

SELECT 
    pr.PlacingRequestId, 
    s.Name as RequestedSchool, 
    cs.Name as CatchmentSchool 
FROM 
    PlacingRequests AS pr 
    INNER JOIN RequestSchools AS rs 
    ON rs.PlacingRequestId = pr.PlacingRequestId 
    INNER JOIN Schools s 
    on s.SchoolId = rs.SchoolId 
    AND rs.RequestSchoolTypeId = 3 -- requested school 
    INNER JOIN Schools cs 
    on cs.SchoolId = rs.SchoolId 
    AND rs.RequestSchoolTypeId = 1 -- catchment school 

如果不是你的意思,更新快乐,你可以按照指示澄清问题。

0

根据我对您的要求的理解,您将需要多个连接,而不是where子句中的另一个AND条件。因此,我们可以省略在这里的地方,并再次将学校与学校一起加入到CatchmentSchool中,因为我们已经为Requestedschool完成过一次。唯一不同的是我们在加入时使用requestedtypeid和catchmenttypeid值。

Select 
pr.PlacingRequestId, 
rs.Name as RequestedSchool 
cs.Name as CatchmentSchool 
FROM 
PlacingRequests AS pr 
INNER JOIN RequestSchools AS rrs 
ON rrs.PlacingRequestId = pr.PlacingRequestId 
and rrs.RequestSchoolTypeId = 3 
JOIN Schools rs 
on rs.SchoolId = rrs.SchoolId 
INNER JOIN RequestSchools AS crs 
ON crs.PlacingRequestId = pr.PlacingRequestId 
and crs.RequestSchoolTypeId = 1 
JOIN Schools cs 
on cs.SchoolId = crs.SchoolId 

希望这有助于...

+0

这是完美的工作。非常感谢你的帮助。 –

0

做到这一点,最好的方法是使用一个CASE函数,但我不知道哪个RDBMS你使用所以这里是蛮力的方法:只要运行你的查询是两个子查询,每个查询指定一个不同的类型ID,然后加入它们。这将是这样的:

SELECT DISTINCT catch.placingrequestid, catch.catchmentschool, requested.requestedschool 
FROM 
(SELECT pr.placingrequestid, s.nam as catchmentschool 
FROM (PlacingRequest pr 
INNER JOIN RequestSchools rs ON pr.placingrequestid = rs.placingrequestid) 
INNER JOIN School s ON rs.schoolid = s.schoolid 
WHERE rs.requestschooltypeid = 1) catch 
INNER JOIN 
(SELECT pr.placingrequestid, s.nam as requestedschool 
FROM (PlacingRequest pr 
INNER JOIN RequestSchools rs ON pr.placingrequestid = rs.placingrequestid) 
INNER JOIN School s ON rs.schoolid = s.schoolid 
WHERE rs.requestschooltypeid = 3) requested 
ON catch.placingrequestid = requested.placingrequestid