我有一个像这样的视图
value1count value2count value3count
----------------------------------------
25 35 55
我需要将列标题转置到行中,因此我需要它看起来像
Values Count
-----------------------------
value1count 25
value2count 35
value3count 55
我可以通过选择单个列名作为第一列,选择数据作为第二列,然后对所有列执行相同的并集来完成此操作。
有更好的方法吗?我使用的是PosgreSQL 8.1,所以没有透视操作符。
感谢您提前回复。
6条答案
按热度按时间dwbf0jvd1#
交叉表只做你所需要的相反的事情,但是这应该会帮助你:
首先创建8.4中包含的
unnest()
函数,有关说明,请参见here。然后可以这样做(基于this post):
我可以验证这在8.4中是否有效,但是因为我没有8.1,所以我不能保证它会同样有效。
yfwxisqw2#
我通过使用
hstore
的功能实现了您的目标:如果“待分解”视图或表(此处称为
t
)中有多行,则可能需要在中间表q
中插入一个附加标识符,例如:参考:
hstore
documentationeqzww0vc3#
我想做一些类似的事情来更容易地处理bash脚本中的表信息。结果证明告诉psql将表的列显示为行是非常容易的:
-x
是旋转输出的对象。-A
会移除额外的间距。-F=
会在数据行名称和值之间,以=
取代|
。这当然不会在SQL中工作,它只修改
psql
如何格式化输出。moiiocjp4#
我也遇到过类似的情况。我用with语句封装查询,然后对每一行执行一系列
UNION ALL
。在我的情况下,如果我有多条记录,ncm_id将是不同的,所以我继续将其添加到结果集中的列列表中。这可能不是最好的方法,但它对我的用例很有效。m528fe3b5#
我可能不明白...但我这样做的方式是也选择DISTINCT然后选择平均列值我需要的.像这样:
这就产生了这样的东西:
这是纽约市的机动车碰撞数据。
yzckvree6#
下面是一种使用hstore的方法,很像Mickaël Le Baillif's answer,但更简洁一些,它允许您动态地选择列的子集,并显示了如何包括更规则的“硬编码”列,如ID,这在更实际的情况下往往是必需的。
请注意,hstore方法有一个缺点:它会将值转换为文本,因此您可能需要将值转换回另一种类型,这取决于您的用例。