1

2 つの入力テーブルがあります。input_table_1 は次のようになります。

prod_id store id    net_sales   gender  color
1   1   34  m   blue
2   1   43  f   green
3   2   12  f   green
4   3   22  f   blue
5   3   56  m   black
6   3   4   f   green

2 番目のテーブルは、テーブル 1 の列名とその値を持つ look_up_table です。

attribut  value_1
gender  m
gender  f
color   blue
color   green
color   black
.           .
.           .
.           .

ネストされたループを実行し、属性の値と value_1 を一時変数に格納するこのコードを作成しました。今、input_table_1 から net_sales の合計を選択したいと思います。ここで、列名は temp_atr_val に格納されており、セル値は temp_val です。私はこのようなことを試みていますが、うまくいきません.temp_sales変数は値を取りません. selectステートメントを使用して、特定の属性値の売上合計を選択する方法を教えてください。

コード:

declare 
temp_atr_val varchar2(400);
temp_val varchar2 (400);
temp_name varchar2 (400);
temp_sum_percent decimal (10,3);
temp_variable number := 786;
column_count number ; 
val_count number;
temp_storeid number (38,0);
temp_sales number ; 
store_count number;
/*  sales_store number; */
BEGIN   
create table store_table as 
select distinct id_dmstore 
from input_table_1
order by store_id;   

select count(distinct attribute) into column_count from look_up_table;
for ind in 1..column_count loop

    /* putting current value of attribute from look_up_table in temp variable*/
    select attribute into temp_atr_val from (
        select attribute, rownum rwn
        from 
        (
           select distinct attribute
           from look_up_table
           order by attribute
        )
    ) where rwn = ind;

    select count( value ) into val_count from look_up_table
   where ATTRIBUTE = temp_atr_val;

    for ind in 1..val_count loop

   /* putting current value_for_atr for corresponding attribute from look_up_table in temp variable*/
        select value_for_atr into temp_val from 
         (
          select value_for_atr, rownum rwn
          from look_up_table
        where ATTRIBUTE = temp_atr_val
         ) where rwn = ind;


      select name_of_col into temp_name from 
      (
      select name_of_col, rownum rwn
      from look_up_table
       where ATTRIBUTE = temp_atr_val
      /* and VALUE_FOR_ATR = temp_val*/
       ) where rwn = ind;

 select count (STORE_id )into store_count from store_table;

 for ind in 1..column_count loop

  select store_id into temp_storeid from (
        select id_dmstore, rownum rwn
        from store_table
        order by store_id
        )
     where rwn = ind;

 select sum(net_sales_home) into temp_sales
 from input_table_1
 where temp_atr_val = temp_val
 and store_id = temp_storeid;


dbms_output.put_line (temp_sales);
 end loop; 
       /* SELECT SUM(CASE WHEN temp_atr_val = temp_val THEN net_sales_home ELSE 0 END) into temp_variable
       FROM schemafinal_1;

 dbms_output.put_line (temp_val);
*/
/*temp_variable := temp_variable/sales_store; */

EXECUTE IMMEDIATE 'ALTER TABLE SAR ADD ('||temp_name||' number)'; 
EXECUTE IMMEDIATE ' UPDATE SAR b 
SET b.'||temp_name||' = :temp_variable' using temp_variable;

END LOOP;
END LOOP;   
END; 
4

1 に答える 1

0

データを格納するために新しい列を作成しようとしていて、一時変数に新しい値が現れるたびに新しい列が作成されるのを確認している場合は、これを試してみませんか:
2 つの新しい列を作成してそれらを呼び出しますcolumn_name と列の値。このようにして、列の名前とそこに格納される値を格納できます。
後で、その列から選択するには、次のことを行う代わりに:

select column_name from table;

あなたがするだろう:

select column_value from table where column_name = temp_variable;

もちろん、あなたが何をしようとしているのか理解できれば...

于 2012-09-02T23:10:04.787 に答える