从每个日期的不同表中获取某些数据

Get certain data from different tables for each date

我有两个table

现在我想要上述形式的结果,这样在不同的列中应该有不同日期的代码、ID 和计数列,因此它应该看起来像这样

TABLE X
        id date         count
        1  2016-08-16     20
        1  2016-08-17     34
        1  2016-08-18     56
        1  2016-08-19     67
        1  2016-08-20     87

TABLE Y
id  code
1    101
2    102
3    103
4    104
5    105

RESULT
        CODE    ID   2016-08-16 2016-08-17 2016-08-18  2016-08-19  2016-08-20                                    
        101       1  20         34         56          67          87
  1. 获得类似结果的简单方法是

    SELECT y.code, y.id, json_object_agg(x.date, x.count)
    FROM x INNER JOIN y ON x.id = y.id GROUP BY y.id, y.code
    

    如果你用另一种语言来处理查询结果,我觉得这个就够用了。

  2. 如果日期列需要是动态的,我认为PL/pgSQL是必要的。

    DO $$
    BEGIN
        EXECUTE (SELECT format('CREATE TEMPORARY TABLE result AS
            SELECT code, id, %s FROM (
                SELECT y.code, y.id, json_object_agg(x.date, x.count) AS counts
                FROM x INNER JOIN y ON x.id = y.id GROUP BY y.id, y.code) as sub',
                string_agg(DISTINCT 'counts->>''' || date :: TEXT || ''' AS ' || '"' || date :: TEXT || '"', ',')
            ) FROM x);
    END
    $$ LANGUAGE plpgsql;
    SELECT * FROM result;