簡體   English   中英

SQL,postgres中的迭代函數

[英]Iterative function in SQL, postgres

我有一個巨大的腳本,希望以迭代方式(while或for循環)創建,因此它變得可概述且更短。 它在SQL中應該可行是非常有意義的,但是到目前為止,我還沒有成功。 為了使它起作用,我現在所做的就是將UNION組合在一起制成一張桌子的許多選擇。

我想對年份進行迭代,所以當年份低於2017年時,執行函數將年份作為變量,從1995年開始。

因此,實際上,這是一個迭代函數,它將在以下代碼行中填入所有年份,並將所有結果組合在一個表中:如果取得進展,我將不斷嘗試並更新代碼。

SELECT 
    regio, 1995 as year, sum("0") as "0", sum("1") as "1", sum("2") as "2", sum("3") as "3", sum("4") as "4", sum("5") as "5", sum("6") as "6", sum("7") as "7", sum("8") as "8", sum("9") as "9", sum("10") as "10"
FROM 
    source 
where
    year = 1995 OR "year-1" = 1995 OR "year-2" = 1995 OR "year-3" = 1995 OR "year-4" = 1995 
group by 
    regio
UNION
SELECT 
    regio, 1996 as year, sum("0") as "0", sum("1") as "1", sum("2") as "2", sum("3") as "3", sum("4") as "4", sum("5") as "5", sum("6") as "6", sum("7") as "7", sum("8") as "8", sum("9") as "9", sum("10") as "10"
FROM 
    source 
where 
    year = 1996 OR "year-1" = 1996 OR "year-2" = 1996 OR "year-3" = 1996  OR "year-4" = 1996 
group by 
    regio

您似乎想要:

SELECT regio, g.yyyy as year, sum("0") as "0", sum("1") as "1",
       sum("2") as "2", sum("3") as "3", sum("4") as "4",
       sum("5") as "5", sum("6") as "6", sum("7") as "7",
       sum("8") as "8", sum("9") as "9", sum("10") as "10"
FROM source CROSS JOIN
     generate_series(1995, 2017) g(yyyy)
WHERE g.yyyy IN (year, "year-1", "year-2", "year-3", "year-4")
GROUP BY regio, g.yyyy;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM