【问题标题】:Iterate Data Table ontop of another Data table and make one table在另一个数据表之上迭代数据表并制作一个表
【发布时间】:2015-11-06 01:15:44
【问题描述】:

我有一个问题。 这是故事,我有学生成绩单(表A

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

我有一张表(表 B )用于奖牌的截止标记。

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

能否请您帮我在 SQL 中获取以下表格(表格)。

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(奖牌截止成绩表)然后进入决赛桌?

非常感谢您的回答/cmets。

谢谢 加延

【问题讨论】:

  • 白银的分界线没有意义。 50 物质的价值是多少?

标签: sql sql-server sql-server-2008 join stored-procedures


【解决方案1】:

修改后:

;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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2023-03-23
    • 2010-11-20
    相关资源
    最近更新 更多