2017-08-18 53 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