我如何在 sql 中执行此操作?

时间:2021-04-28 07:24:50

标签: sql sql-server

我有一张学生表,一张课程表和一张包含学生ID和课程ID的表,我想找到所有“学生朋友”,意思是他们至少做了两门相同的课程

1 个答案:

答案 0 :(得分:0)

 WITH StudentsSubjects AS
  (
      SELECT 1 AS STUDENT_ID,'MATH' AS SUBJECTT
         UNION ALL
      SELECT 1,'ENGLISH'
        UNION ALL
      SELECT 1,'HISTORY'
        UNION ALL
      SELECT 1,'CS'
       UNION ALL
     SELECT 2,'HISTORY'
       UNION ALL
     SELECT 2,'GEO'
       UNION ALL
     SELECT 3,'CS'
       UNION ALL
     SELECT 3,'HISTORY' 

 )
 SELECT X.PRIMARY_STUDENT,X.SECONDARY_STUDENT
 FROM
 (
   SELECT S.STUDENT_ID AS PRIMARY_STUDENT,S.SUBJECTT,S2.STUDENT_ID AS   SECONDARY_STUDENT, 
 ROW_NUMBER()OVER(PARTITION BY S.STUDENT_ID,S2.STUDENT_ID ORDER BY S.STUDENT_ID)D
 FROM StudentsSubjects AS S
 JOIN StudentsSubjects AS S2 ON S.STUDENT_ID<>S2.STUDENT_ID AND     S.SUBJECTT=S2.SUBJECTT
)X WHERE X.D>1
ORDER BY X.PRIMARY_STUDENT

通用表表达式 StudentsSubjects 是“包含学生 ID 和课程 ID 的表”的替代品。将其替换为您的实际表名

相关问题