SQL:查找列之间的整数

时间:2016-07-28 16:24:26

标签: sql-server tsql integer

我遇到以下情况时遇到问题:我有多所学校的数据,因此每所学校都有一个学校ID号(SchlID)。他们还为每个提供的课程(LoGrd)和(HiGrd)提供高等级和低等级的专栏。我需要根据所有课程了解每所学校提供的成绩。 例如,School 707提供了一个LoGrd 6和HiGrd 6的课程(意味着只有6年级学生参加)。他们还提供了一个LoGrd 6和HiGrd 8课程(意思是6年级,7年级和8年级的学生参加这个课程)。另一方面,学校710提供了第9课和第12课的课程。所以我想要输出列在学校的列和学校提供的每年一个等级的等级列表,如下所示

  • SchlID成绩
  • 707 6
  • 707 7
  • 707 8
  • 710 9
  • 710 10
  • 710 11
  • 710 12

谢谢!

1 个答案:

答案 0 :(得分:0)

下面是一些可以满足您需求的代码。我们使用递归CTE生成所有可能等级的列表。在这种情况下,它应该是1到15,这对您的情况应该是足够的。然后我们加入学校表,选择LoGrd和HiGrd之间的所有成绩。

CREATE TABLE school (SchID INT,LoGrd INT,HiGrd INT);
INSERT INTO school VALUES (707,6,9);
INSERT INTO school VALUES (710,10,12);

WITH AllPossibleGrades (N) AS (
    SELECT 1 AS N
    UNION ALL
    SELECT R.N+1 AS N
    FROM AllPossibleGrades R
    WHERE R.N<=15
)
SELECT S.SchID,AG.N AS Grade
FROM school S
     INNER JOIN AllPossibleGrades AG ON AG.N>=S.LoGrd AND AG.N<=S.HiGrd;