如何解决PLSQL Oracle - 帮助构建一个选择
我想知道如何解决以下问题:
我有以下表格:
| data_id | field_id | fieldValue |
| ------------ | ----------- | ---------- |
| 1 | 1 | Pedro |
| 2 | 2 | Angel|
| 3 | 3 | Carlos|
| 4 | 4 | null|
| 5 | 5 | null|
| 6 | 6 | null|
| 7 | 7 | null|
| 8 | 8 | Math|
字段
| field_id | field_description | page |
|---- |------| -----|
| 1 | abc1 | 1 |
| 2 | abc2 | 1 |
| 3 | abc3 | 1 |
| 4 | abc4 | 2 |
| 5 | abc5 | 2 |
| 6 | abc6 | 2 |
| 7 | abc7 | 3 |
| 8 | abc8 | 3 |
我有以下情况:我只有一个字段表 (表:字段)和另一个数据表(表:数据)。
在数据表中,我有以下结构:
您的 ID、字段 ID(字段表的 FK)以及该字段的值。
它们代表表单上的字段,这些字段在我的数据表中读取和填充。例如,某些字段是表单的第一页、第二页或第三页上的字段。
我必须构建一个满足以下要求的选择:
-如果这个页面上的所有值都是空的,我就不应该在这个页面上返回任何值。
-如果只有一个字段填写了值,我必须返回该页面上的所有值,即使是空值。
在表格上方的示例中,我必须在数据表中进行选择,以便:
- 您必须返回第 1 页上的所有字段。
- 不应返回第 2 页上的任何字段。
- 您必须返回第 3 页上的所有字段。
这必须用PLSQL语言完成,我想知道如何配置这个选择。我尝试了多种方法,但都失败了。
这些值形成了表格,我作为测试添加的,在实践中我会有数千个结果。
解决方法
简而言之,您只需要一个接受页码的查询,并在任何字段不为空时提供数据。
您可以使用解析函数 count
计算非空值,如下所示:
Select * from
(Select d.*,f.*,count(fieldvalue) over () as cnt
From fields f join data d on d.field_id = f.field_id
Where f.page = <input_page_number_here>)
Where cnt> 0
如果您希望所有页面数据都符合您的逻辑而不传递输入页码,请使用以下查询:
Select * from
(Select d.*,count(fieldvalue) over (partition by f.page) as cnt
From fields f join data d on d.field_id = f.field_id)
Where cnt> 0
,
您可以使用 exists
执行此操作:
select f.*
from fields f
where page = ? and exists (
select 1 from fields f1 where f1.page = f.page and f.value is not null
)
此查询应利用 (page,value)
上的索引。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。