在Oracle Apex中使用group by子句

时间:2018-12-10 12:50:47

标签: sql oracle oracle-apex

首先,我是Oracle的新手,这就是为什么我的问题对于有经验的开发人员而言可能很有趣的原因。不好意思。

是。我有一个表Test,带有3个列(ID,名称,组名)

表格

ID | Name | Group_name
1  | name1 | group 1 
2  | name2 | group 1  
3  | name3 | group  1 
4  | name4 | group 2
5  | name5 | group 2

我想在oracle apex中创建一个选择列表。

-选择-

(Group 1)
Name 1
Name 2
Name 3
(Group 2)
Name 4
Name 5

其中 Group1 Group2 仅用于显示而不能选择。

我尝试过:

SELECT NAME, ID
FROM TEST
GROUP BY GROUP_NAME

给出错误:

  

不是按表达式分组

2 个答案:

答案 0 :(得分:0)

首先,您的查询不是有效的SQL。不管是Apex还是sqlplus,在任何环境下都无法使用。但这并不重要,因为...

第二,由于您希望显示组名而不是选择组名,因此您尝试生成的HTML如下所示:

<select>
    <optgroup label="Group 1">
        <option>Name 1</option>
        <option>Name 2</option>
        <option>Name 3</option>
    </optgroup>
    ....

顶点选择项目类型不支持<optgroup>(除非它们在最新版本中已添加)。

我认为您的选择是编写一个插件,但这是一个相当高级的主题,或者使用别人已经制作的一个插件。 Select2 Apex Plugin可以满足您的需求。请参见该页面下方的“选项分组”。

答案 1 :(得分:0)

据我所知,在 Apex 中,您不会影响某些选择列表元素是否不可选择(这是您想要的组名)。

但是,您可以创建一个选择列表查询,以显示所需的内容。这是一个示例:

SQL> with test (id, name, group_name) as
  2    (select 1, 'name1', 'group 1' from dual union all
  3     select 6, 'name2', 'group 1' from dual union all
  4     select 9, 'name3', 'group 1' from dual union all
  5     --
  6     select 2, 'name4', 'group 2' from dual union all
  7     select 4, 'name5', 'group 2' from dual
  8    ),
  9  inter as
 10    (-- Group names; ID is a negative value to make sure it is displayed first
 11     select -row_number() over (order by group_name) id,
 12       '(' || initcap(group_name) ||')' name, group_name
 13     from test
 14     group by group_name
 15     union
 16     -- members of the group
 17     select id, name, group_name
 18     from test
 19    )
 20  select name display_value,
 21         id   return_value
 22  from inter
 23  order by group_name, id;

DISPLAY_V RETURN_VALUE
--------- ------------
(Group 1)           -1
name1                1
name2                6
name3                9
(Group 2)           -2
name4                2
name5                4

7 rows selected.

SQL>