使用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
但这并没有给我明确的价值观。 任何帮助,将不胜感激。 提前谢谢。
答案 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
,依此类推。我们感兴趣的是每个名字第一次出现,因此只能获得不同的名称。