如何在SQL中从上到下垂直翻转列值



如何在SQL中从上到下垂直翻转不按任何特定顺序(既不是asc也不是desc(的列值?

示例:名为"Country"的表只有一列c1,其值

|  C1   |
---------
| JAPAN |
| NEPAL |
| INDIA |
---------

现在我想显示结果集如下:

|  C1   |
----------
| INDIA |
| NEPAL |
| JAPAN |
----------

如果有人能提出建议吗?

使用标准SQL(至少在2003年之前(是不可能的,因为当不使用ORDER BY显式排序时,结果集是一个";无序集合";。

这意味着,您得到结果的顺序应该是完全随机的,并且从对给定查询的调用到对同一查询的下一次调用可能会有所不同。不过,大多数时候,您只需按照将它们插入数据库的方式获取它们,但这并不能保证。例如,当使用高级RDBMs时,您可以根据以前的最后一个ORDER BY对条目进行排序。

这也是为什么在查询表时不会得到任何行号的原因。因为这根本没有意义。

然而,自SQL 2003以来,OLAP函数已经被引入,包括ROW_NUMBER()。由于上述原因;加窗的";使用OVER子句,该子句破坏了初始顺序。但是,您仍然可以依靠一个子查询来获取所有子查询,并加入一个永远不会改变的列:

WITH subquery(c1,c2) AS (SELECT C1,1 AS C2 FROM yourtable)
SELECT c1
FROM subquery
ORDER BY row_number() OVER (PARTITION BY c2) DESC

不要使用CCD_ 5,因为这将返回相同的";ex-æquo;如果两行相同,则为行号。

最新更新