sql – 在一个语句中选择两个表的连接中的第一行

前端之家收集整理的这篇文章主要介绍了sql – 在一个语句中选择两个表的连接中的第一行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要从连接表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

这两个查询将给每个名称一行.

原文链接:https://www.f2er.com/mssql/75411.html

猜你在找的MsSQL相关文章