2017-08-01 33 views
0

我正在使用交叉表查詢我的數據。但現在我需要根據日期過濾日期,然後在交叉表中進行轉換。但我認爲這是不可能的。我也閱讀postgresql文檔,但沒有發現任何與之相關的內容。任何人都可以證實這一點?下面是我試圖運行,但給出了錯誤的查詢:當我使用沒有日期在部分它的工作原理交叉表查詢可以在哪裏有條件的日期?

SELECT * FROM crosstab('SELECT a.name, al.type, COALESCE(sum(a.amt),0) as amt FROM account a where date(a.vdate)>='07-30-2017' and date(a.vdate)<='08-31-2017' group by a.name, a.type order by a.name',$$VALUES ('type1'), ('type2')$$) AS ct ("name" text, "type1" decimal, "type2" decimal)) 

在此先感謝。

+0

您是否嘗試過雙引號過濾日期? (SELECT a.name,al.type,COALESCE(sum(a.amt),0)as amt FROM account a where date(a.vdate)> =''07-30-2017' '和日期(a.vdate)<=''08-31-2017''group by a.name,a.type order by a.name',$$ VALUES('type1'),('type2')$ $)AS ct(「名稱」文本,「type1」十進制,「type2」十進制))' –

+0

非常感謝你:)它的工作。 – charmi

回答

2
第一個查詢使用

美元的報價,就像你的第二個完成:

SELECT * 
FROM crosstab($$ 
    SELECT a.name, a.type, COALESCE(sum(a.amt),0) as amt 
    FROM account a 
    WHERE date(a.vdate)>='07-30-2017' and date(a.vdate)<='08-31-2017' 
    GROUP BY a.name, a.type 
    ORDER BY a.name 
    $$, 
    $$ 
    VALUES ('type1'), ('type2') 
    $$ 
) AS ct ("name" text, "type1" decimal, "type2" decimal); 
+0

非常感謝你:)它的工作。 – charmi

+0

我可以添加變量而不是靜態日期嗎? – charmi

+0

本質上postgresql不知道變量。當然,您可以在生成查詢時在客戶端程序中應用變量,也可以使用輔助表,具體取決於您的期望。我想你可以用更詳細的問題描述來提出一個新問題。 – klin