【发布时间】:2016-08-21 11:46:29
【问题描述】:
我有两张这样的表:
标签主题
+-----------+--------------------+--------------------+----------------------+
| SubjectId | SubjectDescription | MeetingIdImportant | MeetingIdUnimportant |
+-----------+--------------------+--------------------+----------------------+
| INT | NVARCHAR(100) | INT NULL | INT NULL |
+-----------+--------------------+--------------------+----------------------+
tabMeeting
+-----------+-------------+
| MeetingId | MeetingDate |
+-----------+-------------+
| INT | DATETIME |
+-----------+-------------+
在我的应用程序中,我有一个调用存储过程的过滤器(带有SubjectIds 的下拉列表)。
存储过程用于在网格中显示数据,如下所示:
+-------------+------------------------------+--------------------------------+
| MeetingDate | Number of important subjects | Number of unimportant subjects |
+-------------+------------------------------+--------------------------------+
| 01.05.2016 | 5 | 3 |
+-------------+------------------------------+--------------------------------+
如果没有选择任何主题,则必须显示所有可能的会议日期(即使他们还没有指定任何主题)。如果选择了一个主题,那么只有那些将该主题作为重要或不重要主题的会议才会出现。
例子:
我选择了主题“测试”。这个主题在日期为 04.05.2016 的会议中很重要,在日期为 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
但是当我没有选择任何主题时,不会显示任何数据。我错过了什么?
【问题讨论】:
标签: sql-server tsql stored-procedures sql-server-2014