2015-11-06 27 views
0

我有一個問題。 這裏是故事,我有學生標記表(表迭代另一個數據表的ontop數據表並製作一個表

Name Course Marks 
Student 01 32472 44 
Student 02 32472 80 
Student 03 32472 67 
Student 04 32472 76 
Student 05 32472 56 
Student 06 32472 98 
Student 07 32472 13 
Student 08 32472 68 
Student 09 32472 84 
Student 10 32472 93 

我有用於獎牌切斷標記片(表)。

Medel  Course CutOff 
Silver 32472  0-69 
Gold  32472  70 -84 
Platinum 32472  85 -100 

能否請你幫我弄下在SQL表(表1)。

Name Course Medal 
Student 01 32472 Silver 
Student 02 32472 Gold 
Student 03 32472 Silver 
Student 04 32472 Gold 
Student 05 32472 Silver 
Student 06 32472 Platinum 
Student 07 32472 Silver 
Student 08 32472 Silver 
Student 09 32472 Gold 
Student 10 32472 Platinum 

我該如何連接表A(學生標記表)和表B(獎章切斷標記表)然後獲得最終表?

真的很感謝你的回答/評論。

謝謝 加揚

+0

白銀截止沒有意義。 50件事的價值是什麼? – sgeddes

回答

2

您的編輯後:

;WITH CteMedals AS(
    SELECT *, 
     rStart = LEFT(CutOff, CHARINDEX('-', CutOff) - 1), 
     rEnd = SUBSTRING(CutOff, CHARINDEX('-', CutOff) + 1, LEN(CutOff) - CHARINDEX('-', CutOff)) 
    FROM TableB 
) 
SELECT 
    a.Name, a.Course, ISNULL(b.Medal, 'Silver') AS Medal 
FROM TableA a 
OUTER APPLY(
    SELECT TOP 1 Medal 
    FROM CteMedals 
    WHERE 
     a.Marks BETWEEN rStart AND rEnd 
    ORDER BY rEnd DESC 
)b 

您可以使用OUTER APPLY

SELECT 
    a.Name, a.Course, ISNULL(b.Medal, 'Silver') AS Medal 
FROM TableA a 
OUTER APPLY(
    SELECT TOP 1 Medal 
    FROM TableB 
    WHERE 
     a.Marks >= CutOff 
    ORDER BY CutOff DESC 
)b 
相關問題