首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将T查询转换为Postgres

将T查询转换为Postgres
EN

Stack Overflow用户
提问于 2015-12-08 07:22:42
回答 1查看 897关注 0票数 0

我想将我的Server查询转换为Postgres。下面是我试图转换的查询,我在postgres中得到了错误

错误:“交叉表”第2行或其附近的语法错误: 交叉表(变量IN (8,9)的和(值))p^ QUERY:选择TIMESTAMP_S,合并(8,0)作为variable_8_value,合并(9,0)从ARCHIEVE_EXPORT_DB_AR3 t选择variable_9_value 在(8,9)p上下文中变量的交叉表(和(值)):PL/pgSQL函数在EXECUTE语句* Error * 错误:语法错误位于或接近“交叉表”SQL状态: 42601上下文: PL/pgSQL函数在EXECUTE语句处的第12行

代码语言:javascript
复制
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);
代码语言:javascript
复制
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();
EN

回答 1

Stack Overflow用户

发布于 2015-12-08 08:23:32

this answer中可以看出,您没有正确地使用crosstab

crosstab在一个模块中;您包括它了吗?交叉表中的查询需要以引号表示。

我建议您将重点放在先使用crosstab的基本查询上,然后再尝试在使用动态SQL的过程中使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34150184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档