sql – 在一个语句中选择两个表的连接中的第一行
发布时间:2020-12-12 08:46:21 所属栏目:MsSql教程 来源:网络整理
导读:我需要从连接表A和B的查询中选择第一行.在表B中存在多个具有相同名称的记录.两个表中的任何一个没有标识符.因为我不拥有数据库,所以我不能改变方案. TABLE ANAMETABLE BNAMEDATA1DATA2Select Distinct A.NAME,B.DATA1,B.DATA2 From A Inner Join B on A.NAME
我需要从连接表A和B的查询中选择第一行.在表B中存在多个具有相同名称的记录.两个表中的任何一个没有标识符.因为我不拥有数据库,所以我不能改变方案.
TABLE A NAME TABLE B NAME DATA1 DATA2 Select Distinct A.NAME,B.DATA1,B.DATA2 From A Inner Join B on A.NAME = B.NAME 这给了我 NAME DATA1 DATA2 sameName 1 2 sameName 1 3 otherName 5 7 otherName 8 9 但是我需要每个名称只检索一行 NAME DATA1 DATA2 sameName 1 2 otherName 5 7 我可以通过将结果添加到带有标识列的临时表中,然后选择每个名称的最小ID来执行此操作. 这里的问题是我需要在一个单一的声明中这样做. 解决方法这将工作:with temp as ( select A.NAME,B.DATA2,row_number() over (partition by A.NAME order by A.NAME) as rownum from TABLEA A inner join TABLEB B on A.NAME = B.NAME ) select NAME,DATA1,DATA2 from temp where rownum = 1 如果要选择data1的最小值,并在其data2中,则使用此变体: with temp as ( select A.NAME,row_number() over (partition by A.NAME order by B.DATA1,B.DATA2) as rownum from TABLEA A inner join TABLEB B on A.NAME = B.NAME ) select NAME,DATA2 from temp where rownum = 1 这两个查询将给每个名称一行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |