0

条件に応じて最大値を取得するクエリが 3 つあります。

select max(to_number(substr(attr_value,9)))+1 
  from circ_inst inner
  join circ_attr_settings 
    on circ_inst.circ_inst_id=circ_attr_settings.circ_inst_id 
   and val_attr_inst_id=1045 
 where circ_attr_settings.attr_value like 'IPANEMA-%' 



select max(to_number(substr(attr_value,10)))+1 
  from circ_inst inner
  join circ_attr_settings 
    on circ_inst.circ_inst_id=circ_attr_settings.circ_inst_id 
   and val_attr_inst_id=1045 
 where circ_attr_settings.attr_value like 'FIREWALL-%'



select max(to_number(substr(attr_value,16)))+1 
  from circ_inst 
 inner join circ_attr_settings
    on circ_inst.circ_inst_id=circ_attr_settings.circ_inst_id
   and val_attr_inst_id=1045 
 where circ_attr_settings.attr_value like 'LAYER2 SWITCH-%'

これら 3 つのクエリから最大数を取得したいと思います (3 つのクエリの結果がそれぞれ 6430、6434、6418 の場合、3 つの結果の最大値である値「6434」を取得したいと思います。

使ってみmax(query1,query2,query3)ましたがうまくいきません。

4

2 に答える 2

5

私はあなたが1つのクエリでこれを行うことができると思います:

select max(to_number(substr(attr_value,instr(attr_value, '-')+1)))+1
from circ_inst inner join
     circ_attr_settings
     on circ_inst.circ_inst_id=circ_attr_settings.circ_inst_id and
        val_attr_inst_id=1045
where circ_attr_settings.attr_value like 'LAYER 2 SWITCH-%') or
      circ_attr_settings.attr_value like 'IPANEMA-%' or
      circ_attr_settings.attr_value like 'FIREWALL-%'

あなたの参加はすべて同じように見えます。唯一の違いは、番号を抽出することです。値の「-」を探すことで、正しい開始位置を取得できます。

于 2012-07-19T13:23:47.813 に答える
2

あなたはおそらくこれを行うことができます:

select greatest (
(select max(to_number(substr(attr_value,9)))+1 from circ_inst inner join circ_attr_settings on circ_inst.circ_inst_id=circ_attr_settings.circ_inst_id and val_attr_inst_id=1045 where circ_attr_settings.attr_value like 'IPANEMA-%'),
(select max(to_number(substr(attr_value,10)))+1 from circ_inst inner join circ_attr_settings on circ_inst.circ_inst_id=circ_attr_settings.circ_inst_id and val_attr_inst_id=1045 where circ_attr_settings.attr_value like 'FIREWALL-%'),
(select max(to_number(substr(attr_value,16)))+1 from circ_inst inner join circ_attr_settings on circ_inst.circ_inst_id=circ_attr_settings.circ_inst_id and val_attr_inst_id=1045 where circ_attr_settings.attr_value like 'LAYER 2 SWITCH-%')
) from dual;
于 2012-07-19T13:23:56.020 に答える