我有两张桌子
包含列ID,日期和计数的X
另一个表是Y,其中包含列id,代码。
现在我想要所提到的表单中的结果,以便在不同列中的不同日期应该有列代码,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
答案 0 :(得分:0)
获得类似结果的简单方法是
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
如果您使用其他语言来处理查询结果,我认为这个就足够了。
如果日期列需要是动态的,我认为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;