Sql 基于行值将两个postgres表中的某些列合并到新表中

Sql 基于行值将两个postgres表中的某些列合并到新表中,sql,postgresql,sql-order-by,full-outer-join,Sql,Postgresql,Sql Order By,Full Outer Join,大家好,PostgresSQL专家们(也许这也是Perl的DBI的一项任务,因为我碰巧也在使用它,但是…)我可能在这里也误用了一些术语,所以请耐心等待 我有一套32张桌子,每一张都一模一样。每个表的第一列始终包含一个日期,而第二列包含的值(整数)可以每24小时更改一次,有些示例会追溯日期。在许多情况下,表格可能永远不包含特定日期的数据。下面是两个这样的表格的示例: date_list | sum date_list | sum ---------------------

大家好,PostgresSQL专家们(也许这也是Perl的DBI的一项任务,因为我碰巧也在使用它,但是…)我可能在这里也误用了一些术语,所以请耐心等待

我有一套32张桌子,每一张都一模一样。每个表的第一列始终包含一个日期,而第二列包含的值(整数)可以每24小时更改一次,有些示例会追溯日期。在许多情况下,表格可能永远不包含特定日期的数据。下面是两个这样的表格的示例:

  date_list      | sum      date_list  | sum
----------------------  --------------------------
 2020-03-12     |   4      2020-03-09  |     1
 2020-03-14     |   5      2020-03-11  |     3
                |          2020-03-12  |     5
                |          2020-03-13  |     9
                |          2020-03-14  |    12

其思想是将单独的表合并为一个表,有点像网格,但将示例放在其自己的列中的正确行中,并确保日期列(始终是第一列)不丢失任何日期,如下所示:

   date_list     | sum1  |  sum2    |  sum3  .... | sum32
---------------------------------------------------------
 2020-03-08     |       |          |
 2020-03-09     |       |     1    |
 2020-03-10     |       |          |   5
 2020-03-11     |       |     3    |  25 
 2020-03-12     |     4 |     5    |  35
 2020-03-13     |       |     9    |  37
 2020-03-14     |     5 |    12    |  40
以此类推,到2020年1月1日为止,共有33列

现在,我尝试了一个
完全外部连接
,它成功了。是后续的尝试给我带来了麻烦,创建了一个长的、层叠的表,其中的值位于错误的位置,或者意外地破坏了数据。因此,我知道,如果我使用一个带有日期序列的一列表,并连接第一个数据表,这是可行的,就像使用小步骤测试我的理论一样:

SELECT date\u table.date\u list,sums\u 1.sum FROM date\u table FULL OUTER JOIN sums\u 1 ON date\u table.date\u list=sums\u 1.date\u list

 2020-03-07     |     1
 2020-03-08     |      
 2020-03-09     |      
 2020-03-10     |     2
 2020-03-11     |      
 2020-03-12     |     4
受鼓舞的是,我认为我的测试会有一点雄心勃勃,但这会将一些行按顺序放在表的底部,我不确定是否丢失了数据,这次我尝试使用以下替代方法:

使用(日期列表)从sums_1完全外部连接sums_2中选择*

结果:

 fecha_sintomas |  sum  |  sum  
----------------+-------+-------
 2020-03-09     |       |     1
 2020-03-11     |       |     3
 2020-03-12     |     4 |     5
 2020-03-13     |       |     9
 2020-03-14     |     5 |    12
 2020-03-15     |     6 |    15
 2020-03-16     |     8 |    20
    :               :        :
 2020-10-29     | 10053 | 22403
 2020-10-30     | 10066 | 22407
 2020-10-31     | 10074 | 22416
 2020-11-01     | 10076 | 22432
 2020-11-02     | 10077 | 22434
 2020-03-07     |     1 |      
 2020-03-10     |     2 |      
(240 rows)
我想我快到了。在任何情况下,我从哪里得到我想要的,这就是我上面描述的数据网格?也许这是一个可以从使用DBI中获益的迭代过程


谢谢,

您可以像这样
完全加入

select date_list, s1.sum as sum1, s2.sum as sum2, s3.sum as sum3
from sums_1 s1
full join sums_2 s2 using (date_list)
full join sums_3 s3 using (date_list)
order by date_list;

使用
语法使得
select
order by
子句中的非限定列
date\u列表
明确无误。然后,我们需要枚举
sum
列,为每个列提供别名。

只需添加
orderbydate\u列表
哦,是的,我有点接近了,但这肯定会照亮道路。非常感谢。