加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

database – 在postgresql中将多列表转换为键名称值元组表

发布时间:2020-12-13 15:55:43 所属栏目:百科 来源:网络整理
导读:我有大量的查询,其中一些可能需要半个小时才能运行,其中许多查询返回超过20个左右的列(是的,它们是标准化的).我感兴趣的是将所有这些数据存储在单个表中,格式为Timestamp,name,value,这是为了以后对数据的自动化. 但是当我有一个返回的查询时 T1,V1t1,V2t1,V
我有大量的查询,其中一些可能需要半个小时才能运行,其中许多查询返回超过20个左右的列(是的,它们是标准化的).我感兴趣的是将所有这些数据存储在单个表中,格式为Timestamp,name,value,这是为了以后对数据的自动化.

但是当我有一个返回的查询时

T1,V1t1,V2t1,V3t1
T2,V1t2,v2t2,v3t2
--   --    --    --

我希望格式化数据

T1,Name(V1),V1t1
T1,Name(V2),V2t1
T1,Name(V3),V1t2
T2,V2t2
T2,V3t2

我知道我可以通过为每个值v1,v2和v3选择联合来做到这一点,

但是我对速度感兴趣,并希望避免发出3个查询,我可以在其中获取数据(尽管是wroung格式)…或者在实际情况下,不要发出20-30个查询,可以在一.

所以问题是,除了转储到临时表并将后续选择运行到表的相关列并将它们组合在一起之外,还有一种方法可以做到这一点.

这可以通过自定义构建的postgresql函数实现吗?

提前致谢

解决方法

您可以使用以下查询的变体实现所需的功能.

CREATE TABLE data
(
   sampleTime timestamptz,value1 numeric,value2 numeric,value3 numeric
);

INSERT INTO data(sampleTime,value1,value2,value3) values(now(),1,2,3);
INSERT INTO data(sampleTime,4,5,6);

SELECT data.sampleTime,CASE
      WHEN generate_series = 1 THEN 'value1'
      WHEN generate_series = 2 THEN 'value2'
      ELSE 'value3'
   END AS key,CASE
      WHEN generate_series = 1 THEN value1
      WHEN generate_series = 2 then value2
      ELSE value3 
   END AS value
FROM data,generate_series(1,3)
ORDER BY data.sampleTime,generate_series

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读