有什么方法可以让ALIAS引用其他列值吗?

时间:2019-05-23 02:00:24

标签: sql postgresql pivot-table alias

我正在尝试找出如何引用其他列的值的ALIAS。

我不确定是否有可能,但是它会获得一些窍门吗?

如何执行类似下面代码的查询?

SELECT chd_value AS **chd_key value**
FROM table1 where chd_id = 1;

其中chd_key将替换为表中“ chd_key”列的值。

Table1

所以我将得到类似的输出

this

3 个答案:

答案 0 :(得分:1)

关键字是“枢轴”或“交叉列表”。

对于chd_key中有限的已知数量的不同值,最快的技术是crosstab()。喜欢:

SELECT *
FROM   crosstab(
   'SELECT chd_id, chd_key, chd_value
    FROM   tbl
    where  chd_id = 1
    ORDER  BY 1'  -- ORDER BY redundant in this special case
  , $$VALUES ('food'), ('color'), ('gadget')$$
   ) AS ct (chd_id int, food text, color text, gadget text);

详细说明:

但这不是完全动态的,而这是很难用SQL完成的。参见:


一种简单地获得"key":"value"的方式,如您稍后评论:

SELECT format('"%s":"%s"', chd_key, chd_value) AS chd_pair
FROM tbl WHERE chd_id = 1;

答案 1 :(得分:0)

这不会像您在图像中显示的那样给您两行,但是如果您只希望将键/值对放在一列中,请对键/值对进行串联:

SELECT (chd_key || ':' || chd_value) AS chd_pair
FROM table1 WHERE chd_id = 1;

要根据要求以快速而肮脏的方式添加双引号:

SELECT ('"' || chd_key || '":"' || chd_value || '"') AS chd_pair
FROM table1 WHERE chd_id = 1;

这不是很漂亮,但是很容易并且有效。

答案 2 :(得分:0)

基于作者打算使用PHP的注释,可以使用PDO获得所需的输出。例如,假设$pdo是PDO实例:

 $pdo->query('SELECT chd_key, chd_value FROM table1 where chd_id = 1')
     ->fetchAll(PDO::FETCH_KEY_PAIR)

以上将导致与预期输出的关联数组。第一列用作键,第二列用作值:

[
  'food' => 'chiken'
]

https://www.php.net/manual/en/book.pdo.php

https://www.php.net/manual/en/pdostatement.fetchall.php

相关问题