加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读