数据表
CREATE TABLE [dbo].[Data](
[RecordNumber] [int] NULL,
[Data1] [nvarchar](10) NULL,
[Data2] [nvarchar](10) NULL
) ON [PRIMARY]
审批表
CREATE TABLE [dbo].[Approval](
[RecordNumber] [int] NOT NULL,
[ApprovedByLevel] [int] NOT NULL,
[ApprovedByName] [nvarchar](50) NOT NULL
) ON [PRIMARY]
在审批表中,我存储了记录号和审批记录的人。
同一条记录多人审批,最后想结合数据表只显示Last Approved By Person Level和Name。
期待查询结果
使用 Ms-SQL Server 2014
Update
在这
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=d1c10b03c62b282d096a1f7d7dbfca4b
我想得到的结果是
最佳答案
您可以使用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/