sql - 如何按 ASC 和 DESC 顺序对同一列进行排序而不重复

标签 sql sql-server sql-server-2008

通过 SQL 查询,我们如何获得 2 列的输出,第一列是按 ASC 顺序排序的列,第二列是按 DESC 顺序排序的列,没有任何重复值,并且两列都是相同的列。

电磁脉冲表:

EMP_NAME
Megha
Vicky
Neha
Sachin
Neha

查询输出应该是

EMP_NAME_ASC    EMP_NAME_DESC
Megha           Vicky
Neha            Sachin
Sachin          Neha
Vicky           Megha

我尝试了以下解决方案 How to sort a same column both in asc order and desc order

但这并没有给我独特的值(value)观。 任何帮助,将不胜感激。 预先感谢您。

最佳答案

对 Gordon Linoff 的答案稍作修改,您可以获得不同的名称:

;WITH
    cte AS
    (
        SELECT      EMP_NAME
                ,   DENSE_RANK() OVER (ORDER BY EMP_NAME ASC)       AS RankAsc
                ,   DENSE_RANK() OVER (ORDER BY EMP_NAME DESC)      AS RankDesc
                ,   ROW_NUMBER() OVER (PARTITION BY EMP_NAME ORDER BY EMP_NAME)
                                                                    AS RowNumber
        FROM        #EMP
    )

SELECT      cte1.EMP_NAME       AS EMP_NAME_ASC
        ,   cte2.EMP_NAME       AS EMP_NAME_DESC
FROM        cte         cte1
INNER JOIN  cte         cte2    ON cte1.RankAsc = cte2.RankDesc
WHERE       cte1.RowNumber = 1
        AND cte2.RowNumber = 1

每次出现相同名称时,ROW_NUMBER 都会给出一个序列号。 Neha 第一次出现时会得到 1,第二次出现时会得到 2,依此类推。我们对每个名称第一次出现的时间感兴趣,因此仅获取不同的名称。

关于sql - 如何按 ASC 和 DESC 顺序对同一列进行排序而不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50912917/

相关文章:

sql - Entity Framework 数据库查询非常慢

SQL Server - 高级分组

sql - T-SQL INSERT INTO 使用 LEFT JOIN

sql-server - 将 .bak mssql 2005 恢复到新的 mssql 2008r2 服务器

sql - 如何查找键重复但所有列中不重复的行?

mysql - 对 3 个表进行 SQL 查询(计数)

sql - 为什么插入和加入#temp 表更快?

c# - 如何进入亚音速?

mysql - WCF:从 Oracle 10g、MySQL 和 SQL Server 2008 数据库获取数据的最佳方式?

MySQL 将行转为动态数量的列