如何在 LibreOffice Base 查询中使用 ROWNUM 函数(或类似函数)?

如何在 LibreOffice Base 查询中使用 ROWNUM 函数(或类似函数)?

我正在尝试帮助某人将数据按字母顺序排列并加上行号。我想我可以做这样的查询

从“数据”中选择“名称”,ROWNUM() 作为“行”,按“名称”排序

但我只是收到“权限被拒绝”错误或类似错误。

有人能帮忙吗?ROWNUM() 是否按我认为的方式工作?或者有没有更好的方法来获取按名称排序的数据的行号?

这是我收到的错误:

访问被拒绝:语句中的 ROWNUM [SELECT "Description", ROWNUM( ) FROM "Data" ORDER BY "Description" ASC]

答案1

我现在有一个使用工具> SQL 的解决方案......

我从未排序的“数据”表开始。对我来说,它只是一个带有自动生成的“ID”和“名称”列的表。下面是

ID 名称

0 约翰

1 朱利安

2 卡罗尔

3. 安东尼

4 保罗

五 克里斯

6 鲍勃

然后我创建一个新表“Sorted”。它只有一个列“Name”。我在设计视图中创建它,保存时我没有创建主键。

然后使用工具> SQL ...我运行这些命令

插入“已排序”,从“数据”中选择“名称”,按“名称”升序排序;

修改表“已排序”,在“名称”前添加列“项目”INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1)

我明白了

项目名

1 安东尼

2 鲍勃

三 卡罗尔

四 克里斯

约翰五书

6 朱利安

7 保罗

这正是我想要的。

如果我向“数据”表添加更多行,并想要重新创建“排序”表,我需要运行这些 SQL 命令

从“已排序”中删除;

更改表“已排序”删除列“项目”;

插入“已排序”,从“数据”中选择“名称”,按“名称”升序排序;

修改表“已排序”,在“名称”前添加列“项目”INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1)

答案2

另一个解决方案是按照这篇文章中的说明进行操作

https://forum.openoffice.org/en/forum/viewtopic.php?f=83&t=61183

这是关于升级到较新的 HSQL 引擎版本,而不是与 OpenOffice Base 捆绑的版本。新的 HSQL 引擎支持 ROWNUM()、ROW_NUMBER() OVER、ANSI SQL 构造等。

答案3

如果您尝试创建一个包含连续数字的新列:

这在计算中有效,我错过了你在基础中工作

  1. 创建新列
  2. 在第一个单元格中输入起始数字(大多数情况下为 #1)
  3. 离开牢房并返回牢房
  4. 该单元格将有一个实心黑色边框,右下角有一个方形黑色按钮
  5. 用鼠标单击此按钮并将其向下拖动到所需的位置,以创建所需的所有数字

我希望这就是你正在寻找的

威廉

答案4

使用“<=”连接条件和 count() group by 的自连接可以完成这项工作。以下查询返回相同的结果。

SQL> 从(从 t 中选择 * 按 b 空值优先排序)t 中选择 rownum,t。

SQL> 从 t t1、t t2 中选择 count(t1.n) 作为 rownum、t2.n、t2.a、t2.b,其中 nvl(t1.b,' ') < nvl(t2.b,' ') 或 nvl(t1.b,' ') = nvl(t2.b,' ') 且 t1.n <= t2.n 按 t2.n、t2.a、t2.b 分组,按 1 排序;

ROWNUM          N A                              B

     1       1004 ddd
     2       1003 ccc                            --
     3       1002 bbb                            MM
     4       1001 aaa                            NN

已选择 4 行。

相关内容