如何在ASC和EXC中对同一列进行排序DESC订单没有重复

时间:2018-06-18 15:31:58

标签: sql sql-server sql-server-2008

使用SQL查询,我们如何获得2列的输出,第一列是以ASC顺序排序的列,第二列是DESC顺序,没有任何重复值,两者都是相同的列。

EMP表:

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

但这并没有给我明确的价值观。 任何帮助,将不胜感激。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

您是列中的两个单独列表。这不是一种存储数据的SQL方式 - 行并不意味着什么。但您可以使用row_number()

执行此操作
select a.name, d.name
from (select name, row_number() over (order by name asc) as seqnum
      from t
     ) a join
     (select name, row_number() over (order by name desc) as seqnum
      from t
     ) d 
     on a.seqnum = d.seqnum;

答案 1 :(得分:1)

通过对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,依此类推。我们感兴趣的是每个名字第一次出现,因此只能获得不同的名称。