SQL Server多重排序说明

uemypmqf  于 2022-12-22  发布在  SQL Server
关注(0)|答案(1)|浏览(193)

查询1:

SELECT
    ROW_NUMBER() OVER(PARTITION BY C_CallID ORDER BY DATETIME) ROWNUMBER
    ,CallID
    ,C_CALLID
    ,NAME
    ,DATETIME
FROM
    TABLENAME
ORDER BY DATETIME

查询2:

SELECT
    ROW_NUMBER() OVER(PARTITION BY C_CallID ORDER BY DATETIME, ASC NAME DESC) ROWNUMBER
    ,CallID
    ,C_CALLID
    ,NAME
    ,DATETIME
FROM
    TABLENAME
ORDER BY DATETIME ASC, NAME DESC

查询1输出:

查询2输出:

因此,我的理解是,行号将基于所有记录的DATETIMEASC进行排序,然后NAME列记录的排序将为DESC
我的问题是“第二次排序会影响第一次排序的数据吗?”

pod7payv

pod7payv1#

用一个简单的例子来解释总是比较容易的。
考虑以下数据:

CREATE TABLE Sample (
  A int,
  B int
);

INSERT INTO Sample (A, B) VALUES
(1, 1),
(1, 2),
(1, 3),
(2, 1),
(3, 1),
(3, 2),
(3, 3);

和以下查询:

SELECT A, B
FROM Sample
ORDER BY A ASC, B ASC;

A   B
1   1
1   2
1   3
2   1
3   1
3   2
3   3

SELECT A, B
FROM Sample
ORDER BY A ASC, B DESC;

A   B
1   3
1   2
1   1
2   1
3   3
3   2
3   1

两个查询的结果都是A为升序,但第一个查询的结果也是B为升序,而第二个查询的结果是B为降序-因此第二次排序不会以任何方式影响第一次排序。仅当主排序返回该列中具有相等值的多个行时,辅助排序才会生效。
当然,即使您有一个包含两列以上的order by子句,该规则也适用。

相关问题