微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL 加入并获取缺失记录的空输出

如何解决SQL 加入并获取缺失记录的空输出

如何从下面的两个表中获取输出(在 sql Server 2019 中):

enter image description here

在这里,只需要交叉检查表 A 和表 B 之间的记录 ID 列。 如果表 B 中没有记录 id,则需要在输出表中插入 'NULL'

我们已经在下面的 Query 中尝试过这个,但没有给出正确的输出

我们如何才能获得更快、更准确的输出

SELECT A.ID,A.RecordId,A.LineNo,B.Value
FROM TableA A
LEFT JOIN TableB B ON A.RecordId = B.RecordId

提前致谢。

解决方法

我从数据中对此进行了猜测 - 但我认为这就是您想要的。

从它的外观来看,您从根本上需要从 TableA 到 TableB(如您所愿)的 LEFT JOIN,但不仅仅是在 RecordID 上 - 它还需要 LineNo。

然而,TableB 中不存在 LineNo。因此,您可以使用窗口函数 ROW_NUMBER() 创建它,例如,

SELECT [ID],[RecordID],[Value],ROW_NUMBER() OVER (PARTITION BY [RecordID] ORDER BY [ID]) AS [LineNo]
FROM [TableB]

以上创建了以下结果。

ID  RecordID  Value  LineNo
1   100       AA     1
2   102       BB     1
3   102       BC     2
4   103       CC     1

现在,对于你的最终答案,做一个类似的 LEFT JOIN 但在你的连接中而不是 TableB,使用带有附加列的子查询 - 然后在连接中包含附加列,例如,

SELECT [A].[ID],[A].[RecordId],[A].[LineNo],[B].[Value]
FROM [TableA] A
LEFT JOIN 
    (SELECT [ID],ROW_NUMBER() OVER (PARTITION BY [RecordID] ORDER BY [ID]) AS [LineNo]
     FROM TableB
    ) B ON A.[RecordId] = B.[RecordId] AND A.[LineNo] = B.[LineNo]

这是带有数据和结果的 DB_fiddle

编辑:调整错别字 - 另请注意 LineNo 似乎是一个保留关键字,因此我在所有这些关键字周围都添加了方括号。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。