簡體   English   中英

將T-SQL查詢轉換為Postgres

[英]Convert T-SQL Query to Postgres

我想將我的SQL Server查詢轉換為Postgres。 以下是我嘗試轉換的查詢,而Postgres中出現錯誤

錯誤:“交叉表”第2行或附近的語法錯誤:
crosstab(SUM(VALUE)FOR VARIABLE IN(8,9))p ^查詢:從ARCHIEVE_EXPORT_DB_AR3中選擇TIMESTAMP_S,COALESCE(8,0)AS variable_8_value,COALESCE(9,0)AS variable_9_value
crosstab(SUM(VALUE)FOR VARIABLE IN(8,9))p上下文:PL / pgSQL函數somefuncname()EXECUTE語句的第12行**********錯誤********* *

錯誤:“交叉表”處或附近的語法錯誤SQL狀態:42601上下文:PL / pgSQL函數somefuncname()第12行位於EXECUTE語句

Declare @sql varchar(max);
Declare @sql2 varchar(max);
set @sql= STUFF((select distinct ','+ QUOTENAME(VARIABLE) from ARCHIEVE_EXPORT_DB_AR FOR XML PATH('')) ,1,1,'');
set @sql2= STUFF((select distinct ','+ 'ISNULL(' + QUOTENAME(VARIABLE) + ',0)' + ' AS ' + QUOTENAME('variable_' + cast(VARIABLE as varchar) + '_value') from ARCHIEVE_EXPORT_DB_AR FOR XML PATH('')) ,1,1,'');

set @sql='select TIMESTAMP_S,' + @sql2 + ' from ARCHIEVE_EXPORT_DB_AR t  
               PIVOT (SUM(VALUE) FOR VARIABLE IN ('+@sql+')) p';


exec(@sql);
CREATE OR REPLACE FUNCTION somefuncname() RETURNS int LANGUAGE plpgsql AS $$
Declare 
v_sql text;
Declare 
v_sql2 text;
BEGIN
v_sql :=  STRING_AGG(Distinct(("VARIABLE"):: text), ',')   From "ARCHIEVE_EXPORT_DB_A3";
v_sql2 := STRING_AGG(Distinct('COALESCE(' || ("VARIABLE"):: text || ',0) AS variable_' || ("VARIABLE"):: text) || '_value', ',')   From "ARCHIEVE_EXPORT_DB_A3";

v_sql :='select TIMESTAMP_S,' || v_sql2 || ' from ARCHIEVE_EXPORT_DB_AR3 t  
               crosstab(SUM(VALUE) FOR VARIABLE IN (' || v_sql ||')) p';
               execute(v_sql);
END
$$;
SELECT somefuncname();

從此答案看來,您沒有正確使用crosstab

crosstab在模塊中; 你收錄了嗎? 交叉表中的查詢需要用引號引起來。

我建議您重點關注首先使用crosstab的基本查詢,然后再嘗試在具有動態SQL的過程中使用它。

暫無
暫無

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

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