从 Table 1 中删除部分并显示 Table 2 的部分

Taking away part from Table 1 and showing parts of Table 2

我有一个 SQL 问题,在 Teradata 上工作。 我有 2 个表,分别称为 Class、Table 1 和成绩 Table 2。 来自 Table 1 我想从特定的 Class、一年级等中提取特定的一组学生并显示一些额外的数据。 对于来自 Table 1 的数据,我想添加特定科目的成绩,但并非所有学生都在学习这门科目,因此我希望他们的成绩为 NULL。

我知道如何只获取选修这门学科的学生的数据,但我想念其他学生。

SELECT
a.Name
a.Age
b.Subject
b.grade

FROM  Table1 a                                 
LEFT JOIN Table2  b ON a.name=b.name

WHERE a.group in ('1')
AND b.subject in ('2')
;

另外,我知道科目 1=英语,2=历史,3=数学,所以我希望将数字切换为实际名称。

部分数据:

Table1                  Table2      
Group   Name    Age         Name    Subject Grade
1       Anna    12          Anna    1       A
1       Bengt   11          Anna    2       B
1       Cesar   12          Bengt   1       A
2       David   12          Bengt   2       A
2       Eric    13          Bengt   3       C
2       Filip   12          Cesar   1       C
3       Gustav  14          Cesar   3       C
3       Hugo    14          Cesar   4       B
3       Inga    14          Cesar   5       A

我得到的:

Name    Age Subject Grade
Anna    12  2       B
Bengt   11  2       A

我想要的:

Name    Age Subject Grade
Anna    12  History B
Bengt   11  History A
Cesar   12  

拜托,谁能帮帮我。

决赛SQL

SELECT
    DISTINCT(a.Name)
    a.Age
    (CASE When b.scan_type_cd in ('2') then 'History' else NULL END) AS History,
    b.grade

    FROM  Table1 a                                 
    LEFT JOIN Table2  b ON a.name=b.name AND b.scan_type_cd in ('2')

    WHERE a.group in ('1')
    ;

您的查询正在使用 IN,但您不需要它。如下修复 WHERE 部分,看看它是否按预期工作:

SELECT
a.Name
a.Age
b.Subject
b.grade

FROM  Table1 a                                 
LEFT JOIN Table2  b ON a.name=b.name

WHERE a.group='1'
AND b.subject='2';

对于关于显示名称而不是主题 ID 的部分,您必须在查询中引入另一个连接

您需要创建一个单独的 table 主题,然后加入 Subject/ID。这样您就可以用名称替换数字。或者你可以使用 IF(b.subject = 1,'English',IF(b.subject = 2,'History',IF(b.subject = 3,'Science'))) 但这不是很合适 table 对于很多主题。

WHERE 位是您的问题。你需要把它放在 LEFT JOIN 上,这样你的查询就会像这样:

ON a.name = b.name AND subject = 2

试试看...

通过限制 JOIN,您仍然 return 其他行 - WHERE 发生在连接发生之后,因此您看不到所有学生。