将多个SELECT INTO结果组合成一个变量

时间:2014-07-31 18:02:06

标签: sql postgresql plpgsql postgresql-9.3

我使用的方法可能效率不高(或可能),如果是这样,请告诉我。 我正在尝试使用SELECT INTO选择两个值,然后将它们附加到变量(v1),该变量将由函数作为一个单元格返回。在两个UNION ALL语句之间插入SELECT INTO会产生ERROR: syntax error at or near "UNION"

编辑 - 该函数提供了两个为这两个SELECT INTO语句指定的唯一值(非null)

所需的输出:

    v1             v2      v3    etc.
2678, 2987         

摘自功能:

SELECT value
    INTO v1
    FROM table
    WHERE year <= parameteryear;

SELECT value
    INTO v1
    FROM table    
    WHERE yearinteger >= parameteryear;

data := v1;
RETURN NEXT;
END;
$$ LANGUAGE plpgsql;

3 个答案:

答案 0 :(得分:1)

如果要使用union all查询,它必须位于派生表中。

select value
into v1
from (union query goes here) derivedTable

答案 1 :(得分:1)

 SELECT cast(t1.value as varchar(20)) || ', ' || cast(t2.value as varchar(20))
     INTO v1
     FROM table as t1, table as t2
     WHERE t1.year <= parameteryear
       AND t2.yearinteger >= parameteryear;

答案 2 :(得分:1)

每个单独的声明可疑,因为SELECT INTO期望返回单行,但您的WHERE条件似乎无法保证 at

将两者结合在一个语句中更加可疑,因为如果其中一个缺失或者NULL或不唯一,则会产生各种副作用。只有这些并发症都不会发生才有意义。我非常怀疑。

如果您至少可以保证获得两种条件的值,那么这将工作

SELECT concat_ws(',', t1.value, t2.value) 
INTO   v1
FROM   tbl t1, tbl t2
WHERE  t1.year <= parameteryear
AND    t2.yearinteger >= parameteryear;

但我几乎是积极的,它没有做你想做的事 此外,从您的期望输出判断&#34;您实际上可能需要 设置 行。

简而言之:您提供的片段没有任何意义 。发布您的完整代码以及您实际尝试实现的目标。当然,有一种不同的方法。