2010-09-03 21 views
0

我有一個來自4個課程和兩個不同部門(數學101,數學102,英語201,英語202)的學生的表格。我想選擇數學101和英語201的學生,如果他們已經擁有了它,則選擇英語202,如果他們擁有了它,或者他們都擁有了他們,則選擇202。SQL Statement同列不同數據


編輯:

StudentID | Dept | CrsNum 
12345  MS  101 
99999  MS  102 
10000  EH  201 
56789  EH  201 
12345  EH  201 
12345  EH  202 

理想的情況下,查詢結果將顯示該學生12345與他一直在,因爲他是唯一一個誰一直在這兩個MS 101,所有課程這兩個EH課程。

+2

你能給數據庫結構,一些樣本數據和例子,什麼是你期望 – Dheer 2010-09-03 06:38:45

回答

1

嘗試類似:

select StudentID, Dept, CrsNum 
from StudentCourse SC 
where CrsNum in (101, 201, 202) and 
exists 
(select null 
from StudentCourse SC1 
where SC.StudentID = SC1.StudentID and 
     sc1.CrsNum = 101) and 
exists 
(select null 
from StudentCourse SC2 
where SC.StudentID = SC2.StudentID and 
     sc1.CrsNum in (201,202)) 

另外,你應該能夠做到這一點,而不與像查詢任何子查詢:

select StudentID, 
     Sum(case when CrsNum = 101 then 1 else 0) InCrs101, 
     Sum(case when CrsNum = 201 then 1 else 0) InCrs201, 
     Sum(case when CrsNum = 202 then 1 else 0) InCrs202 
from StudentCourse SC 
where CrsNum in (101, 201, 202) 
group by StudentID 
having Sum(case when CrsNum = 101 then 1 else 0) >= 1 and 
     (Sum(case when CrsNum = 201 then 1 else 0) >= 1 or 
     Sum(case when CrsNum = 202 then 1 else 0) >= 1) 
1
SELECT S1.StudentID 
    FROM Students AS S1 JOIN (SELECT S3.StudentID 
           FROM Students AS S3 
          WHERE S3.Dept = 'MS' 
           AND S3.CrsNum = 101) AS S2 
     ON S1.StudentID = S2.StudentID 
WHERE S1.Dept = 'EH' 
    AND S1.CrsNum IN (201, 202); 

或者,如果所有的信息都希望(如評論所說),以此爲子查詢選擇相關學生ID):

SELECT * FROM Students 
WHERE StudentID IN 
      (SELECT S1.StudentID 
       FROM Students AS S1 JOIN (SELECT S3.StudentID 
              FROM Students AS S3 
              WHERE S3.Dept = 'MS' 
              AND S3.CrsNum = 101) AS S2 
        ON S1.StudentID = S2.StudentID 
       WHERE S1.Dept = 'EH' 
       AND S1.CrsNum IN (201, 202)); 
1

一個簡單的子查詢會做:

select StudentID from table where 
(Dept = "MS" and CrsNum = 101) and 
StudentID in (select StudentID from table where 
      ((Dept = "EH" and CrsNum = 201) or 
       (Dept = "EH" and CrsNum = 202))) 
+0

只會顯示結果學生ID - OP希望學生和他參加的所有匹配課程。 – 2010-09-03 12:48:40