通過各種查詢組合得出具有如下欄位的一個查詢結果:org,year,month,account,balance
現在想將account列轉置成列,org,year,month保持不變,因為不確定會有多少個值,所以請問各位大師有什么簡便的方法實作這種動態行轉列的方法?y
uj5u.com熱心網友回復:
pivot, 如果 account 數量不確定,需要用動態sqluj5u.com熱心網友回復:
我也查看了很多有關pivot行轉列的文章,對于動態sql/存盤程序實作行轉列這一環節始終不得其意,能就轉化這一塊詳細說一下么?
uj5u.com熱心網友回復:

我建了一張測驗的,然后通過陳述句塊拿到下面的陳述句,執行結果是不是你想要的?

declare
sin varchar2(1024);
ssql varchar2(1024);
begin
select ''''||listagg(account,''',''') within group(order by account)||'''' into sin from TABLE_TEST;
ssql:='select * from TABLE_TEST a
pivot(sum(balance) for account in('||sin||'))';
dbms_output.put_line(ssql);
END;
uj5u.com熱心網友回復:
是這么個意思 但是我這邊弄完它的輸出不是查詢結果 而是一個sql陳述句
uj5u.com熱心網友回復:
declaresin varchar2(1024);
ssql varchar2(1024);
begin
select ''''||listagg (會計科目,''', ''') WITHIN GROUP (ORDER BY 會計科目)||'''' into sin FROM
(select distinct 會計科目 from v_balance_yj);
ssql:='select * from v_balance_yj a
pivot(sum(期末余額) for 會計科目 in('||sin||'))';
dbms_output.put_line(ssql);
END;
uj5u.com熱心網友回復:

前端展示的話,你先拼接in里面的值,然后傳進去,in里面不能直接select
uj5u.com熱心網友回復:


怎么傳呢?
uj5u.com熱心網友回復:
上面是兩種方式declare 是生成陳述句,執行生成的陳述句就是你要的結果
&1是直接傳入值
前后端代碼怎么實作我不懂,我只會資料庫
uj5u.com熱心網友回復:
&1這個直接傳入值是怎么做的呀 我可以把 select ''''||listagg (會計科目,''', ''') WITHIN GROUP (ORDER BY 會計科目)||'''' into &1 FROM
(select distinct 會計科目 from v_balance_yj)
uj5u.com熱心網友回復:
你把&1 改成你定義的變數,上面先給變數賦值應該就可以了吧,這個不就和頁面篩選框條件查詢差不多嗎?uj5u.com熱心網友回復:


像這樣挺麻煩的
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/43225.html
標籤:高級技術
上一篇:teachers表問題
下一篇:ssh框架
