2016-04-27 8 views
0

と同じテーブルから2つのフィールドが参加しますドロップダウンリストはSubjectIds)、ストアドプロシージャを呼び出します。は、私はこのような2台を持っているパラメータ

ストアドプロシージャは、このようなグリッド内のデータを表示するために使用されます。

+-------------+------------------------------+--------------------------------+ 
| MeetingDate | Number of important subjects | Number of unimportant subjects | 
+-------------+------------------------------+--------------------------------+ 
| 01.05.2016 |    5    |    3    | 
+-------------+------------------------------+--------------------------------+ 

何の被写体が選択されていない場合、彼らは任意の割り当てられた主題を持っていない場合でも、すべての可能な会議の日付が(示されなければならまだ)。サブジェクトが選択された場合、このサブジェクトを重要または重要でないサブジェクトとして持つミーティングのみが表示されます。

例:

「テスト」という科目を選択しました。この件名は、2006年4月5日の会議では重要で、11.05.2016の会議では重要ではありません。

+-------------+------------------------------+--------------------------------+ 
| MeetingDate | Number of important subjects | Number of unimportant subjects | 
+-------------+------------------------------+--------------------------------+ 
| 04.05.2016 |    6    |    2    | 
| 11.05.2016 |    2    |    4    | 
+-------------+------------------------------+--------------------------------+ 

この私のストアドプロシージャで、このコードで作業されています:

SELECT meeting.MeetingId, 
    meeting.MeetingDate, 
    (SELECT COUNT(MeetingIdMS1) FROM dbo.tabSubject WHERE MeetingIdImportant = meeting.MeetingId) AS NumberOfImportantSubjects, 
    (SELECT COUNT(MeetingIdMS8) FROM dbo.tabSubject WHERE MeetingIdUnimportant = meeting.MeetingId) AS NumberOfUnimportantSubjects 
FROM dbo.tabMeeting meeting 
INNER JOIN 
(
    SELECT MeetingIdImportant MeetingId 
    FROM dbo.tabSubject 
    WHERE (@SubjectId IS NOT NULL AND SubjectId = @SubjectId) 
    UNION ALL 
    SELECT MeetingIdUnimportant 
    FROM dbo.tabSubject 
    WHERE (@SubjectId IS NOT NULL AND SubjectId = @SubjectId) 
) t ON 
    CASE 
     WHEN @SubjectId IS NOT NULL THEN t.MeetingId 
     ELSE meeting.MeetingId 
    END = meeting.MeetingId 

しかし、私は、任意の対象を選んだしていないとき、何もデータが示されていない。今、私はこのような結果が予想されます私は何が欠けているのですか?

@SubjectId

答えて

1

がnullで、INNER JOIN戻る `の代わりに使用することのWHERE`条件`インナーJoin`で `Exists`を使用しないデータ

SELECT meeting.MeetingId, 
    meeting.MeetingDate, 
    (SELECT COUNT(MeetingIdMS1) FROM dbo.tabSubject WHERE MeetingIdImportant = meeting.MeetingId) AS NumberOfImportantSubjects, 
    (SELECT COUNT(MeetingIdMS8) FROM dbo.tabSubject WHERE MeetingIdUnimportant = meeting.MeetingId) AS NumberOfUnimportantSubjects 
FROM dbo.tabMeeting meeting 
WHERE 
    @SubjectId IS NULL 
    OR EXISTS 
    (
     SELECT * FROM tabSubject 
     WHERE 
     (
      MeetingIdImportant = meeting.MeetingId 
      OR MeetingIdUnimportant = meeting.MeetingId 
     ) AND SubjectId = @SubjectId 
    ) 
+0

@diiN_場合はテーブルTにデータがありません – Eric

関連する問題