我有一个简单的查询:
create table #Test
(
ID INT,
name VARCHAR(100),
num INT
)
INSERT INTO #Test VALUES(1,'bob', 98)
INSERT INTO #Test VALUES(2,'bob', 44)
INSERT INTO #Test VALUES(3,'sam', 60)
INSERT INTO #Test VALUES(4,'deacon', 14)
INSERT INTO #Test VALUES(5,'toby', 99)
INSERT INTO #Test VALUES(6,'toby', 12)
SELECT * FROM #Test ORDER BY num DESC, name DESC
DROP TABLE #Test
输出:
ID name num
5 toby 99
1 bob 98
3 sam 60
2 bob 44
4 deacon 14
6 toby 12
我想要做的是首先按num BUT对数据进行排序,如果有重复的名称,我希望名字跟随彼此,无论数字是什么。
我正在寻找的输出是:
ID name num
5 toby 99
6 toby 12
1 bob 98
2 bob 44
3 sam 60
4 deacon 14
我的订单有问题,任何帮助都会受到赞赏
答案 0 :(得分:1)
试试这个:
SELECT
t.ID,
t.name,
t.num
FROM
#Test t
ORDER BY
(
SELECT
MAX(t2.num)
FROM
#test t2
WHERE
t2.NAME = t.name
GROUP BY
t2.NAME
) DESC
答案 1 :(得分:0)
你不会得到你期望的输出,因为它不是字母,但我认为这正是你要找的。 (在订购方式中交换名称和 num )
create table #Test
(
ID INT,
name VARCHAR(100),
num INT
)
INSERT INTO #Test VALUES(1,'bob', 98)
INSERT INTO #Test VALUES(2,'bob', 44)
INSERT INTO #Test VALUES(3,'sam', 60)
INSERT INTO #Test VALUES(4,'deacon', 14)
INSERT INTO #Test VALUES(5,'toby', 99)
INSERT INTO #Test VALUES(6,'toby', 12)
SELECT * FROM #Test ORDER BY name DESC, num DESC
DROP TABLE #Test
答案 2 :(得分:0)
首先获取最高分的名称。我们使用子查询执行此操作。
然后使用该子查询,获取具有最高名称的顺序,然后按名称排序,然后按num
select * from
(
select name as cname,max(num) as num from test
group by name, order by max(num) num desc
) as x
order by cname desc, num desc