为一个源行创建包含多行的视图

时间:2014-09-16 09:20:37

标签: sql sql-server oracle postgresql

我的表格中有offsetqty列。 我现在想要创建一个视图,其中包含每个精确position的条目。

表格

offset |   qty   |  more_data
-------+---------+-------------
 1     |    3    | 'qwer'
 2     |    2    | 'asdf'

查看:

position | more_data
---------+------------
   1     | 'quer'
   2     | 'quer'
   3     | 'quer'
   2     | 'asdf'
   3     | 'asdf'

这甚至可能吗?

我需要为Oracle(8! - 11),MS SQL(2005-)和PostgreSQL(8 - )

做到这一点

3 个答案:

答案 0 :(得分:1)

根据您的输入/输出:

with t(offset, qty) as (
  select 1, 3 from dual
)
select offset + level - 1 position
  from t
connect by rownum <= qty

POSITION
--------
       1
       2
       3

答案 1 :(得分:1)

在Oracle中,回答具体问题(即只有一行的表):

select rn posn from (
    select offset-1+rownum rn from the_table 
    connect by level between offset and qty 
);

实际上,您的表将有多行,因此您需要将内部查询限制为1个对象行,否则我认为您将获得巨大的错误输出。如果您可以提供有关表格/数据的更多详细信息,则可以给出更完整的答案。

答案 2 :(得分:1)

对于Postgres:

select offst, generate_series(offst, qty) as position
from the_table
order by offst, num;

SQLFiddle:http://sqlfiddle.com/#!10/e70d9/4

我没有像8.0,8.1或8.2那样古老的东西,但它也应该适用于那些史前版本。

请注意,offset是Postgres中的保留字。您应该为该列找到不同的名称