[英]Convert T-SQL Query to Postgres
I want to convert my SQL Server query into Postgres. 我想将我的SQL Server查询转换为Postgres。 Below is the query I have tried to convert and I am getting error in postgres
以下是我尝试转换的查询,而Postgres中出现错误
ERROR: syntax error at or near "crosstab" LINE 2:
错误:“交叉表”第2行或附近的语法错误:
crosstab(SUM(VALUE) FOR VARIABLE IN (8,9)) p ^ QUERY: select TIMESTAMP_S,COALESCE(8,0) AS variable_8_value,COALESCE(9,0) AS variable_9_value from ARCHIEVE_EXPORT_DB_AR3 tcrosstab(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 CONTEXT: PL/pgSQL function somefuncname() line 12 at EXECUTE statement ********** Error **********crosstab(SUM(VALUE)FOR VARIABLE IN(8,9))p上下文:PL / pgSQL函数somefuncname()EXECUTE语句的第12行**********错误********* *
ERROR: syntax error at or near "crosstab" SQL state: 42601 Context: PL/pgSQL function somefuncname() line 12 at EXECUTE statement
错误:“交叉表”处或附近的语法错误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();
It appears from this answer that you aren't using crosstab
correctly. 从此答案看来,您没有正确使用
crosstab
。
crosstab
is in a module; crosstab
在模块中; have you included it? 你收录了吗? And the query within crosstab needs to be in quotes.
交叉表中的查询需要用引号引起来。
I suggest that you focus on getting a basic query that uses crosstab
working first, before trying to use it in a procedure with dynamic SQL. 我建议您重点关注首先使用
crosstab
的基本查询,然后再尝试在具有动态SQL的过程中使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.