通过 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/