2016-08-04 25 views
0

我試圖編寫一個包含複雜約束的查詢(至少對我來說)。我需要從我的數據庫中抽取三條測試(測試表A中的測試A,測試B和測試C)中顯示其得分的學生數據行。我需要符合以下標準:我需要學生在測驗A上得分恰好爲5,另外他們需要在測驗B和測驗C上得分至少爲4分,在測驗B和測驗中得分爲5 C也是如此。我如何編寫這個語法?謝謝。「where」子句中的複雜約束條件

+3

幫助我們幫助你!請分享表結構[s],一些樣本數據以及您想要獲得的樣本結果。 – Mureinik

+0

他們如何「在測試B和測試C上得分至少爲4,在測試B和測試C上得分爲5」?你在同一個測試中不能得到4和5的分數......對吧? – JNevill

+0

這是最基本的查詢。什麼似乎是一個問題? –

回答

0

有幾種方法可以解決這個問題。這是一個。 (我作出有關字段名稱和表結構假設爲示例的目的):

; 
WITH A 
as (
    SELECT * 
    FROM Test 
    WHERE TestID = 'A' 
) 
, B 
as (
    SELECT * 
    FROM Test 
    WHERE TestID = 'B' 
) 
, C 
as (
    SELECT * 
    FROM Test 
    WHERE TestID = 'C' 
) 
-- Pull it all together 
SELECT A.StudentID 
    , ScoreA = A.Score 
    , ScoreB = B.Score 
    , ScoreC = C.Score 
FROM A 
    INNER JOIN B 
     ON A.StudentID = B.StudentID 
    INNER JOIN C 
     ON A.StudentID = C.StudentID 
-- Filter 
WHERE A.Score = 5 
    AND B.Score >= 4 
    AND C.Score >= 4 
    AND (B.Score = 5 or C.Score = 5) 

這是基於這樣的假設的分數A,B,和C是所有在Test不同的行表,並且希望結果在同一行中具有全部三個分數。

如果它們全都在同一行中,則可以跳過CTE,只需使用WHERE子句,並適當地重命名了字段和前綴。

+0

謝謝你,這是非常有益的! – eca16

+0

很高興聽到它!如果有幫助,請考慮將其標記爲您接受的答案。謝謝。 –