我想将表达式的结果用作列名。
例如,我有一个表“cbr”,只有一行
--QUERY_1
SELECT * FROM cbr;
value_usd | value_uah | value_kzt | value_rur
-----------+-----------+-----------+-----------
57.0861 | 2.15257 | 0.171365 | 1
--QUERY_2
SELECT value_usd from cbr;
value_usd
-----------
57.0861
--QUERY_3
SELECT 'value_'||'usd' from cbr;
?column?
-----------
value_usd
(1 row)
我希望QUERY_3返回与QUERY_2相同的结果。怎么办呢?
答案 0 :(得分:1)
规范化表格:
create table cbr (
currency char(3),
value numeric
);
insert into cbr (currency, value) values
('usd',57.0861),('uah',2.15257),('kzt',0.171365),('rur',1)
;
select *
from cbr
where currency = 'usd'
;
currency | value
----------+---------
usd | 57.0861
答案 1 :(得分:0)
最好的选择是通过添加货币列和每个值的行来规范化表结构,如@Clodoaldo Neto所述。如果无法做到这一点,动态SQL是您的下一个最佳选择。请注意,它必须在pl / pgsql代码中使用。这是一个例子:
CREATE OR REPLACE FUNCTION GetCurrencyValue(Currency text)
RETURNS SETOF DOUBLE PRECISION AS
$BODY$
BEGIN
RETURN QUERY EXECUTE 'SELECT value_'||Currency||' from cbr;';
END;
$BODY$
LANGUAGE plpgsql;
此函数接受参数“Currency”并将其用作列名称的一部分。然后,您可以通过调用此函数来获取第二个查询的结果:
--Updated QUERY_3
SELECT * FROM GetCurrencyValue('usd');