2017-08-18 39 views
0

SSRSでデータセットのクエリを作成しようとしています。私はRequestedSchool (RequestedSchoolTypeId = 3)複数のwhere句を持つSQLクエリ

Iの名前を取得したい

  1. 学校
  2. 設置要求
  3. RequestSchoolType

:私は参加の表では、3つの他のテーブルにリンクRequestSchoolsと呼ばれています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 OR 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条件は必要なくなります。だから私たちはここでどこを省略して、Requestedschoolのためにもう一度やったことがあるように、CatchmentSchoolのためにもう一度学校とリクエストスクールに参加することができます。違いは、join中に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強引なアプローチである私にはわからない。ただ実行します2つのサブクエリとしてクエリを実行し、それぞれ異なるタイプ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 
関連する問題