oracle中如何计算范围
我有一个定义范围的表,例如:
START | END | MAP
1 | 10 | A
11 | 15 | B
...
我如何查询该表,以便结果将是
ID | MAP
1 | A
2 | A
3 | A
4 | A
5 | A
6 | A
7 | A
8 | A
9 | A
10 | A
11 | B
12 | B
13 | B
14 | B
15 | B
...
我打赌它很简单......感谢您的帮助
。
I have a table defining ranges, e.g.:
START | END | MAP
1 | 10 | A
11 | 15 | B
...
how do I query into that table so the result will be
ID | MAP
1 | A
2 | A
3 | A
4 | A
5 | A
6 | A
7 | A
8 | A
9 | A
10 | A
11 | B
12 | B
13 | B
14 | B
15 | B
...
I bet its a easy one... Thanks for the help
f.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这个解决方案乍一看似乎很复杂,但通常可以解决任何范围。解决可能受到任何其他范围干扰的 VALUE 问题。
首先创建示例表并插入数据:
现在数据如下所示:
现在创建对象类型:
并且还创建管道函数:
最后您可以使用简单查询:
或者从视图中创建并选择它(如果您想隐藏 OBJECT 实现):
基于这是我的文章:
http://martin-mares.cz/2010 /08/oracle-db-pipelined-function/
This solution at first glance it looks complicated, but generally resolves any range. Solve problem with VALUEs which may be interfered with any other range.
Firstly create sample table and insert data:
Now data look like this:
Now create object type:
And also create PIPELINED FUNCTION:
Finally you can use simple query:
Or create and select it from view (if you want hide OBJECT implementation):
Based on this my article:
http://martin-mares.cz/2010/08/oracle-db-pipelined-function/
我可以给你一个肮脏的解决方案。但请不要笑我:(
选择
DUMMY_ID
,地图
从
虚拟
,(从
实际
中选择开始
、END
、地图
)AS实际
在哪里
DUMMY_ID
BETWEENSTART
ANDEND
请注意,上面给定的查询是 MySQL。我很长时间没有使用 Oracle,但你肯定明白我的意思。
I can give you a dirty solution. But please don't laugh at me :(
Join these two tables, your actual table and the DUMMY table. Just like this :
SELECT
DUMMY_ID
,MAP
FROM
DUMMY
,(SELECT
START
,END
,MAP
FROMACTUAL
) ASACTUAL
WHERE
DUMMY_ID
BETWEENSTART
ANDEND
Note that given query above is MySQL. I didn't use Oracle for long time but sure you got the point.
在
PostgreSQL
中,您可以执行以下操作:更新:
在示例数据上进行测试:
In
PostgreSQL
, you could just do:Update:
Tested on your sample data: