我有一个看起来像这样的观点
value1count value2count value3count
----------------------------------------
25 35 55
Run Code Online (Sandbox Code Playgroud)
我需要将列标题转换为行,所以我需要它看起来像
Values Count
-----------------------------
value1count 25
value2count 35
value3count 55
Run Code Online (Sandbox Code Playgroud)
我可以通过选择单个列名称作为第一列,将数据作为第二列,然后为所有列执行相同的并集来完成此操作.
有一个更好的方法吗?我正在使用PosgreSQL 8.1,因此没有使用枢轴运算符.
感谢您的回复.
Pin*_*nyM 32
Crosstab只会与您需要的相反,但这应该可以帮助您:
首先创建unnest()
8.4中包含的功能,请参阅此处获取说明.
然后你可以这样做(基于这篇文章):
SELECT
unnest(array['value1Count', 'value2Count', 'value3Count']) AS "Values",
unnest(array[value1Count, value2Count, value3Count]) AS "Count"
FROM view_name
ORDER BY "Values"
Run Code Online (Sandbox Code Playgroud)
我可以验证这是在8.4中工作,但因为我没有8.1,我不能保证它会工作相同.
我通过使用hstore
功能实现了你的目标:
SELECT (x).key, (x).value
FROM
( SELECT EACH(hstore(t)) as x
FROM t
) q;
Run Code Online (Sandbox Code Playgroud)
如果您的"待爆炸"视图或表(此处称为t
)中有多行,则可能需要在中间表中插入一个附加标识符q
,例如:
SELECT id, (x).key, (x).value
FROM
( SELECT id, EACH(hstore(t)) as x
FROM t
) q;
Run Code Online (Sandbox Code Playgroud)
参考:hstore
文档
我正在寻找与此类似的操作,以便更轻松地处理来自 bash 脚本的表信息。事实证明,告诉 psql 将表列显示为行非常容易:
psql mydbname -x -A -F= -c "select * from blah where id=123"
Run Code Online (Sandbox Code Playgroud)
-x
就是输出的支点。-A
去除多余的空格。-F=
替换|
与=
列名和值之间。这当然不会在 SQL 中工作,它只会修改psql
格式化输出的方式。
归档时间: |
|
查看次数: |
18307 次 |
最近记录: |