SQL - 介于和之间

时间:2013-07-29 13:08:44

标签: sql

with bar_no as (
select 1 start_bar, 5 end_bar from dual)
select barcode
from (select level barcode
from dual
connect by level <= (select max(end_bar) from bar_no)) a
where exists (
select 1
from bar_no
where barcode between bar_no.start_bar and bar_no.end_bar)

这将重新开始: 1 2 3 4 5

我需要一些帮助才能推进此查询。如何设置查询以多次打印每个数字(返回)。

例如:

打印1到5之间的数字并打印每个数字3次。

最终结果: 1 1 1 2 2 2 3 3 3 4 4 4 五 五 5

顺便说一句。我将在Jasper ireport中使用它,并且不想使用过程,函数等

请帮忙!提前谢谢

2 个答案:

答案 0 :(得分:3)

您可以在with语句中生成序列,然后将它们连接在一起:

with bar_no as (
      select 1 start_bar, 5 end_bar from dual
     ),
     codes as (
      select level + start_bar - 1 start_bar
      from bar_no
           connect by level <= end_bar - start_bar + 1
     ),
     counts as (
       select level as repcnt
       from dual connect by level <= 3
     )
select *
from codes cross join counts
order by 1, 2;

答案 1 :(得分:0)

尝试使用交叉连接作为下面的

with bar_no as (
select 1 start_bar, 5 end_bar from dual)
select barcode
from (select level barcode
from dual
connect by level <= (select max(end_bar) from bar_no)) a
where exists (
select 1
from bar_no
cross join 
(
  select 1
  union all
  select 2
  union all
  select 3  
   ) CJ
where barcode between bar_no.start_bar and bar_no.end_bar)