SQL查询连接两个表并根据ApprovedByLevel获取最新数据

标签 sql sql-server

数据表

enter image description here .

CREATE TABLE [dbo].[Data](
    [RecordNumber] [int] NULL,
    [Data1] [nvarchar](10) NULL,
    [Data2] [nvarchar](10) NULL
) ON [PRIMARY]

enter image description here

审批表

enter image description here

CREATE TABLE [dbo].[Approval](
    [RecordNumber] [int] NOT NULL,
    [ApprovedByLevel] [int] NOT NULL,
    [ApprovedByName] [nvarchar](50) NOT NULL
) ON [PRIMARY]

enter image description here

在审批表中,我存储了记录号和审批记录的人。
同一条记录多人审批,最后想结合数据表只显示Last Approved By Person Level和Name。

期待查询结果

enter image description here

使用 Ms-SQL Server 2014

Update

在这

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=d1c10b03c62b282d096a1f7d7dbfca4b

我想得到的结果是

enter image description here

最佳答案

您可以使用row_number() 窗口函数来获取结果中您想要的[ApprovedByLevel]:

select d.*, 
  COALESCE(a.[ApprovedByLevel], 0) AS [ApprovedByLevel], 
  a.[ApprovedByName]
from [Data] d left join (
  select *, 
    row_number() over (partition by [RecordNumber] order by [ApprovedByLevel] desc) rn
  from [Approval]
) a
on a.[RecordNumber] = d.[RecordNumber] and a.rn = 1

参见 demo .
结果:

> RecordNumber | Data1 | Data2 | ApprovedByLevel | ApprovedByName
> -----------: | :---- | :---- | --------------: | :-------------
>         1001 | A     | AA    |               3 | Mr.C          
>         1002 | B     | BB    |               5 | Mr.DD
>         1003 | C     | CC    |               0 | 

关于SQL查询连接两个表并根据ApprovedByLevel获取最新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59575931/

相关文章:

mysql - 如何总计 3 个 select 语句计数?

sql - 选择 SQL 列作为添加的行

sql - 用户定义的函数 SQL Server 2005 被错误地标记为非确定性?

sql - 在 SQL 中删除数百万条记录的最佳方法是什么?

iphone - 将存储过程转换为 NSString 时出现问题

sql - 渐进搜索最长前缀

SQL Server 临时表与游标

sql - TSQL 查询返回基于另一个列值的最新记录

sql-server - 使用增加的 ID 更新 Sql Server 行

sql - Oracle:将子查询中的多个结果合并为一个逗号分隔的值