我有一张学生信息表和一张家长信息表。我想为每个学生返回一个电子邮件地址,但只有一个。所以我运行这个查询:
SELECT [STU].[ID], [PAR].[EM]
FROM (SELECT [STU].* FROM DB1.STU)
STU LEFT JOIN (SELECT [PAR].* FROM DB1.PAR) PAR ON [STU].[ID] = [PAR].[ID]
这给了我下表:
Student ID ParentEmail
1 jim@email.com
1 sarah@email.com
2 paul@email.com
2 tim@email.com
3 bill@email.com
3 frank@email.com
3 joyce@email.com
4 greg@email.com
5 tony@email.com
5 sam@email.com
每个学生都有多封家长邮件,但我只想要一封。换句话说,我希望输出像这样:
Student ID ParentEmail
1 jim@email.com
2 paul@email.com
3 frank@email.com
4 greg@email.com
5 sam@email.com
我试过很多东西。我试过用 GROUP BY
以及 MIN/MAX
我试过了 CASE
陈述,我试过了 COALESCE
但我就是想不通。
2条答案
按热度按时间klh5stk11#
我想
OUTER APPLY
最简单的方法是:通常,会有
ORDER BY
在子查询中,为您提供对所需电子邮件的控制—最长、最短、最旧或其他。没有一个ORDER BY
它只返回一封电子邮件,这就是你所要求的。bvhaajcl2#
如果您只需要父表中的一列,一种简单的方法是关联子查询:
这给你每个学生最好的家长电子邮件。