我有一個動態 SQL 查詢,它基本上會為一年中的每個新周添加一個新列。查詢中使用的表如下所示:
REP_NAME WEEK
Amy 1
John 1
John 2
John 3
Nancy 1
Nick 1
Nick 2
Nick 3
為了使報告動態化(在表更新后每周添加一個新列(也是每周一次)),我正在使用 Classic 上的“PL/SQL 函式體回傳 SQL 查詢”選項報告。為此,我之前創建了一個函式:
create or replace Function my_Testing_table_function
RETURN varchar2
IS
v_stmt varchar2(5000);
v_my_week number;
begin
v_stmt :='with initial_data as(
select distinct
Rep_name
from my_testing_table
order by 1
)' ;
for i in (select distinct week from my_testing_table ) loop
v_stmt := v_stmt || ', week_'|| i.week || ' as(
select
Rep_name,
count(unique_j) unique_'|| i.week ||
'
from my_testing_table
where week = ' || i.week || '
group by week, Rep_name
)';
end loop;
v_stmt := v_stmt || ' select
b.Rep_name';
for i in (select distinct week from my_testing_table) loop
v_stmt := v_stmt || ', unique_'|| i.week || ' as Week_' || i.week ;
end loop;
v_stmt := v_stmt || ' from initial_data b';
for i in (select distinct week from my_testing_table) loop
v_stmt := v_stmt || ' left join week_'|| i.week || ' wk'|| i.week || ' on wk'||i.week
||'.Rep_name = b.Rep_name';
end loop;
return v_stmt;
end;
這個函式回傳我想要的查詢,但是,當在我的經典報告中使用時......結果不存在。顯然我錯過了一些東西,但不知道它是什么。有人可以建議嗎?

結果經典報告:

uj5u.com熱心網友回復:
嗯,是的 - 動態創建的報告看起來很聰明,但是 - 從我的角度來看,我會采用更經典的方法 - 一個簡單且易于維護的查詢,如下所示:
SQL> select rep_name,
2 count(case when week = 1 then unique_j end) w1,
3 count(case when week = 2 then unique_j end) w2,
4 count(case when week = 3 then unique_j end) w3
5 from my_testing_table
6 group by rep_name
7 order by rep_name;
REP_N W1 W2 W3
----- ---------- ---------- ----------
Amy 1 0 0
John 1 1 1
Nancy 1 0 0
Nick 1 1 1
SQL>
是的,它需要一點點復制/粘貼(其中 52COUNT行,因為一年有 52 周)并且讓您想知道“等一下,它必須看起來那么愚蠢嗎?”,但是 - 正如我所說,它不僅簡單而且每個人都很容易理解(即使是那些有一天會繼承您的代碼的開發人員)。你寫的函式很聰明,但我真的不想有一天除錯它。我發布的查詢是微不足道的,易于修復。
現在由你決定;我只是將我的查詢放入經典報告的來源。
uj5u.com熱心網友回復:
只需使用
RETURN my_Testing_table_function();
在您的示例中,您要求 APEX 作為來自DUAL.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/356385.html
