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;