我想知道是否有可能并且更有效地做一些我目前在代码中做的事情,而不是在 T-SQL 中做。
我有一个包含课程的数据库。每门课程可以有不同的课程,这些课程是在不同地点和不同奖项的课程的变体。
这是我的(简化的)数据库结构和一些示例数据:
CREATE TABLE tblCourse (CourseId int, CourseName varchar(50))
CREATE TABLE tblOffering (OfferingId int, CourseId int, LocationId int, AwardId int)
CREATE TABLE tblLocation (LocationId int, LocationName varchar(50))
CREATE TABLE tblAward (AwardId int, AwardName varchar(50))
INSERT INTO tblCourse VALUES (1, 'Course A')
INSERT INTO tblCourse VALUES (2, 'Course B')
INSERT INTO tblOffering VALUES (1, 1, 1, 1)
INSERT INTO tblOffering VALUES (2, 1, 2, 1)
INSERT INTO tblOffering VALUES (3, 1, 3, 1)
INSERT INTO tblOffering VALUES (4, 1, 1, 2)
INSERT INTO tblOffering VALUES (5, 2, 3, 1)
INSERT INTO tblLocation VALUES (1, 'Location A')
INSERT INTO tblLocation VALUES (2, 'Location B')
INSERT INTO tblLocation VALUES (3, 'Location C')
INSERT INTO tblAward VALUES (1, 'Award A')
INSERT INTO tblAward VALUES (2, 'Award B')
我想从 SQL 中检索的是每个课程/奖励组合的单行。每行都有每个位置的列,以及该 CourseId/AwardId 组合的课程是否可用。现在将有没有提供的课程/奖励组合的行。
来自示例数据的所需结果将是这样的记录集:
CourseId | CourseName | AwardId | AwardName | LocationA | LocationB | LocationC
---------+------------+---------+-----------+-----------+-----------+----------
1 | Course A | 1 | Award A | True | True | True
1 | Course A | 2 | Award B | True | NULL | NULL
2 | Course B | 1 | Award A | NULL | NULL | True
(NULL 也可能是 False)
目前,我正在做一个带有各种 JOINS 的简单 SELECT 语句,它为每个课程/奖励组合提供了多行,然后我遍历代码中的所有行并构建所需的结果。但是,我认为这不是那么有效,因为我还需要对结果进行分页。
我想我可以通过创建一个临时表和一堆单独的查询在存储过程中相当容易地做到这一点,但我认为这不会太有效。想知道在 T-SQL 中是否有更好的方法?
所以澄清一下,我正在寻找的是一个 T-SQL 查询或存储过程,它将产生上述示例记录集,并且我可以调整分页。
注意。我正在使用 SQL Server 2008