首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PostgreSQL是否将列转换为行?转置?

PostgreSQL是否将列转换为行?转置?
EN

Stack Overflow用户
提问于 2012-12-30 02:07:31
回答 4查看 95K关注 0票数 33

我有一个PostgreSQL函数(或表),它给出了以下输出:

代码语言:javascript
复制
Sl.no    username    Designation    salary   etc..
 1        A           XYZ            10000    ...
 2        B           RTS            50000    ...
 3        C           QWE            20000    ...
 4        D           HGD            34343    ...

现在我想要的输出如下:

代码语言:javascript
复制
Sl.no            1       2        3       4       ...
 Username        A       B        C       D       ...
 Designation     XYZ     RTS      QWE     HGD     ...
 Salary          10000   50000    20000   34343   ...

该怎么做呢?

EN

回答 4

Stack Overflow用户

发布于 2012-12-30 02:34:54

代码语言:javascript
复制
SELECT
   unnest(array['Sl.no', 'username', 'Designation','salary']) AS "Columns",
   unnest(array[Sl.no, username, value3Count,salary]) AS "Values"
FROM view_name
ORDER BY "Columns"

参考:

票数 29
EN

Stack Overflow用户

发布于 2016-03-17 02:57:06

如果(像我一样)您需要来自bash脚本的此信息,请注意,psql有一个简单的命令行开关来告诉它将表列输出为行:

代码语言:javascript
复制
psql mydbname -x -A -F= -c "SELECT * FROM foo WHERE id=123"

-x选项是让psql将列输出为行的关键。

票数 11
EN

Stack Overflow用户

发布于 2019-02-06 01:21:05

我有一种比Erwin上面提到的更简单的方法,那就是Postgres (我认为它应该适用于所有支持SQL标准的主要关系数据库)。

您可以简单地使用UNION而不是交叉表:

代码语言:javascript
复制
SELECT text 'a' AS "text" UNION SELECT 'b';

 text
------
 a
 b
(2 rows)

当然,这取决于您要应用这一点的情况。考虑到您事先知道需要哪些字段,甚至在查询不同的表时也可以采用这种方法。即:

代码语言:javascript
复制
SELECT 'My first metric' as name, count(*) as total from first_table UNION
SELECT 'My second metric' as name, count(*) as total from second_table 

 name             | Total
------------------|--------
 My first metric  |     10
 My second metric |     20
(2 rows)

这是一种更易维护的方法,IMHO。有关更多信息,请查看此页面:https://www.postgresql.org/docs/current/typeconv-union-case.html

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

https://stackoverflow.com/questions/14084503

复制
相关文章

相似问题

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