如何在 SQL 中从上到下垂直翻转列值
How to vertically flip the column values top to down in SQL
如何从上到下垂直翻转 SQL 中没有任何特定顺序(既不是升序也不是降序)的列值?
示例:名为 'Country' 的 Table 有一个列 c1,其值为
| C1 |
---------
| JAPAN |
| NEPAL |
| INDIA |
---------
现在我想显示结果集如下:
| C1 |
----------
| INDIA |
| NEPAL |
| JAPAN |
----------
有哪位好心人可以推荐一下吗?
不可能使用标准 SQL(至少在 2003 年之前),因为当未使用 ORDER BY
明确排序时,结果集是“无序集”。
这意味着您获得结果的顺序应该是完全随机的,并且在对给定查询的调用和对同一查询的下一次调用之间可能会有所不同。不过,大多数时候,您只是按照将它们插入数据库的方式获取它们,但这并不能保证。使用高级 RDBM 时,例如,您可以根据您之前所做的最后一个 ORDER BY
对您的条目进行排序。
这也是您在查询 table 时没有得到任何 行号 的原因。因为它根本没有意义。
但是,从 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
不要使用 RANK()
,因为如果两行相同,这将 return 相同的“前”行号。
如何从上到下垂直翻转 SQL 中没有任何特定顺序(既不是升序也不是降序)的列值?
示例:名为 'Country' 的 Table 有一个列 c1,其值为
| C1 |
---------
| JAPAN |
| NEPAL |
| INDIA |
---------
现在我想显示结果集如下:
| C1 |
----------
| INDIA |
| NEPAL |
| JAPAN |
----------
有哪位好心人可以推荐一下吗?
不可能使用标准 SQL(至少在 2003 年之前),因为当未使用 ORDER BY
明确排序时,结果集是“无序集”。
这意味着您获得结果的顺序应该是完全随机的,并且在对给定查询的调用和对同一查询的下一次调用之间可能会有所不同。不过,大多数时候,您只是按照将它们插入数据库的方式获取它们,但这并不能保证。使用高级 RDBM 时,例如,您可以根据您之前所做的最后一个 ORDER BY
对您的条目进行排序。
这也是您在查询 table 时没有得到任何 行号 的原因。因为它根本没有意义。
但是,从 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
不要使用 RANK()
,因为如果两行相同,这将 return 相同的“前”行号。