根据最大值加入

use*_*348 1 sql t-sql sql-server max aggregate-functions

我想知道如何将表自身联接起来或使用case语句在视图中分配最大值。说我有下表:

 Lastname     Firstname     Filename
 Smith        John          001
 Smith        John          002
 Smith        Anna          003
 Smith        Anna          004
Run Code Online (Sandbox Code Playgroud)

我想创建一个列出所有值但又有另一列显示当前行是否为最大行的视图,例如:

 Lastname     Firstname     Filename     Max_Filename
 Smith        John          001          NULL
 Smith        John          002          002
 Smith        Anna          003          NULL
 Smith        Anna          004          NULL
Run Code Online (Sandbox Code Playgroud)

这可能吗?我尝试了以下查询:

 SELECT Lastname, Firstname, Filename, CASE WHEN Filename = MAX(FileName) 
 THEN Filename ELSE NULL END AS Max_Filename
Run Code Online (Sandbox Code Playgroud)

但是我被告知姓氏不在group by子句中。但是,如果我按姓,名,文件名分组,则max_filename中的所有内容都与文件名相同。

您能否帮助我了解我在做什么错以及如何使此查询正常工作?

Rom*_*kar 5

实际上,您非常接近,但是max您可以将其max用作窗口函数,而不是使用简单的聚合:

select
    Lastname, Firstname, Filename,
    case
        when Filename = max(Filename) over(partition by Lastname, Firstname) then Filename
        else null
    end as Max_Filename
from Table1
Run Code Online (Sandbox Code Playgroud)

sql fiddle demo