我想将结果分组为一列(NAME),然后按每个组的第二列(注释)排序,最后按照最高的顺序对组进行排序。
所以,如果我的实体像这样被扰乱:
NAME NOTE
Andrew 19
Thomas 18
Andrew 18
Andrew 17
Frank 16
Frank 15
Thomas 14
Thomas 12
Frank 5
我希望他们这样订购:
NAME NOTE
Andrew 19
Andrew 18
Andrew 17
Thomas 18
Thomas 14
Thomas 12
Frank 16
Frank 15
Frank 5
按姓名分组,安德鲁首先出现因为他的最高音符是19,然后是托马斯(18)和弗兰克(16)。
此致
缬氨酸
答案 0 :(得分:3)
以下是使用窗口函数的方法:
select name, note
from (select t.*, max(note) over (partition by name) as maxnote
from t
) t
order by maxnote desc, name
除了通过maxnote订购外,它还按名称订购。如果存在联系,则它将给定名称的所有记录保存在一起。
答案 1 :(得分:3)
CTE回答......
Create Table NameNoteTable (Name Varchar(10), Note Int);
Insert NameNoteTable
Select 'Andrew', 19
Union All
Select 'Andrew', 18
Union All
Select 'Andrew', 17
Union All
Select 'Thomas', 18
Union All
Select 'Thomas', 14
Union All
Select 'Thomas', 12
Union All
Select 'Frank', 16
Union All
Select 'Frank', 15;
With cte As
(
Select Row_Number() Over (Order By Max(Note) Desc) As tID,
Name,
Max(Note) As MaxNote
From NameNoteTable
Group By Name
)
Select nnt.Name, nnt.Note
From NameNoteTable nnt
Join cte c
On nnt.Name = c.Name
Order By tID, Note Desc;
答案 2 :(得分:1)
SELECT t.name, t.note
FROM @tbl t
ORDER BY (SELECT MAX(note) FROM @tbl WHERE name = t.name) DESC
, name
, note DESC
这是最简单的方法,使用PARTITION BY只是稍微多一点的语法,在较大的表上可能会更有效地运行。
答案 3 :(得分:0)
非常简单的方法:
从NameNoteTable中选择名称,注释 按名称命令asc,注意desc