[英]Dynamic crosstab using generate_series
嘗試使用generate_series進行動態交叉表。 但是沒有運氣。
此“靜態”查詢按預期工作:
SELECT * FROM crosstab(
$$ SELECT DISTINCT ON(sign,date) sign,date,sum(hr) FROM hr $$,
$$ SELECT * FROM(SELECT to_char(generate_series('2014-01-01','2014-01-05', interval '1 day'),'YYYY-MM-DD') date )date$$)
as ct (sign text,"2014-01-01" text,"2014-01-02" text,"2014-01-03" text,"2014-01-04" text,"2014-01-05" text)
我想用動態查詢代替最后一部分:
sign text,"2014-01-01" text,"2014-01-02" text,"2014-01-03" text,"2014-01-04" text,"2014-01-05" text
我設法通過以下方式創建了此文件:
SELECT concat('sign text,',(SELECT string_agg(col,',') from( select to_char(generate_series('2015-01-01','2015-01-05', interval '1 day'),'\"YYYY-MM-DD\" text')col )cols))
生成與上面相同的文本。 用此“動態”查詢替換“靜態”文本不起作用:
SELECT * FROM crosstab(
$$ SELECT DISTINCT ON(sign,date) sign,date,sum(hr) FROM hr $$,
$$ SELECT * FROM(SELECT to_char(generate_series('2014-01-01','2014-01-05', interval '1 day'),'YYYY-MM-DD') date )date$$)
as ct (SELECT concat('sign text,',(SELECT string_agg(col,',') from( SELECT to_char(generate_series('2015-01-01','2015-01-05', interval '1 day'),'\"YYYY-MM-DD\" text')col )cols)))
“ SELECT”處或附近的語法錯誤
為什么? 任何技巧如何以一種簡單的方式實現這種動態? (最好不使用功能)
TIA,
這里的問題是計划者在計划之前需要知道行的大小。 因此,您有幾種選擇:
現在,第一種方法比較干凈,因為第二種方法可以解決問題,因此您可能必須返回一個refcursor
並從中獲取,因為計划人員需要在返回函數之前先知道函數的輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.