0

我想根据初始选择语句返回的值执行一系列选择语句。本质上循环遍历原始值并将该值用作新选择的标准。

我正在尝试做的一些伪代码(我将如何在 shell 中编写它......):

for location in `select places from tablename where XYZ`
do
   select new_field from tablename where location = '$location';
done

这是我真正想要运行的选择。

给我一份机架清单:

select   regexp_substr("MYTABLE"."Serial_Number" ,'[^ ]+', 1, 3) as "Racks"
  from   "MYTABLE" "MYTABLE" 
 where   "MYTABLE"."Data_Center" ='SOMEPLACE' 
   and   "MYTABLE"."Device_Type" ='RACK'
   and   "MYTABLE"."Serial_Number" not like '%WAREHOUSE%'

根据设备数量打印谁应该拥有机架:

select count(*) as count, LOB 
 from    "MYTABLE" "MYTABLE" 
 where   "MYTABLE"."Data_Center" ='SOMEPLACE' 
   and   GRID_LOCATION = '$RACK_from_above' and rownum <= 1 group by LOB order by count desc;

提前致谢!

4

2 回答 2

2

只需将表连接到自身(使用 2 个不同的别名)

select count(1) as count, MYTABLE1.LOB, MYTABLE1.GRID_LOCATION  
from    "MYTABLE" "MYTABLE1" , "MYTABLE" "MYTABLE2"   
where   MYTABLE1.Data_Center ='SOMEPLACE'    
 and   MYTABLE1.GRID_LOCATION = regexp_substr(MYTABLE2.Serial_Number ,'[^ ]+', 1, 3)
 and   MYTABLE1.rownum <= 1
 and   MYTABLE2.Data_Center ='SOMEPLACE'
 and   MYTABLE2.Device_Type ='RACK'
 and   MYTABLE2.Serial_Number not like '%WAREHOUSE%'
group by MYTABLE1.LOB, MYTABLE1.GRID_LOCATION
order by count desc;

请注意,出于(在我看来)明显的原因,我将网格位置添加到 group by 和 select 子句 - 如果不清楚,您可以作为单独的问题提出。

于 2012-08-14T23:08:50.443 回答
0

您可以轻松地将这些组合成一个查询:

with thelist as (
    select   regexp_substr("MYTABLE"."Serial_Number" ,'[^ ]+', 1, 3) as "Racks"
      from   "MYTABLE" "MYTABLE" 
     where   "MYTABLE"."Data_Center" ='SOMEPLACE' 
       and   "MYTABLE"."Device_Type" ='RACK'
       and   "MYTABLE"."Serial_Number" not like '%WAREHOUSE%'
)
select count(*) as count, LOB 
from    "MYTABLE" "MYTABLE" 
where   "MYTABLE"."Data_Center" ='SOMEPLACE' and
      GRID_LOCATION in (select racks from thelist) and
      rownum <= 1
group by LOB
order by count desc;
于 2012-08-14T23:10:02.603 回答