在 PostgreSQL 中展平 Left Join 结果

Flattenning the Left Join outcome in PostgreSQL

我有 eventtagsfiltervalues。所以我有类似的东西:

eventtags:
event_id, key_id, value_id, event_date

filtervalues:
value_id, key,value, counts_seen

假设我在 eventtags table

中报告了 2 个具有多个键、值对的事件
event_id | key_id | value_id | event_date
---------+--------+----------+-----------
1        |   20   |    32    | xx-xx-xxxx
1        |   21   |    34    | xx-xx-xxxx
2        |   20   |    35    | yy-yy-yyyy
2        |   21   |    39    | yy-yy-yyyy

对应filter_valuetable有如下数据

values_id |  key  | value | counts_seen
----------+-------+-------+----------
32        | type  | staff | 52
34        | tag   | tag1  | 13
35        | type  | user  | 10
39        | tag   | tag2  | 35

现在基于此,我尝试在下面的查询中合并来自两个 tables

的数据
SELECT t.event_id as Event_Id,
          DATE (t.event_date) as Event_Date,
          v.key as Keys,
          v.value as Values
   FROM eventtags t
   LEFT JOIN filtervalues as v ON t.value_id = v.id

结果是这样的

Event_Id |  Keys  |  Values  | Event_Date
---------+--------+----------+-----------
1        |  type  |   staff  | xx-xx-xxxx
1        |  tag   |   tag1   | xx-xx-xxxx
2        |  type  |   user   | yy-yy-yyyy
2        |  tag   |   tag2   | yy-yy-yyyy

我希望数据采用以下格式

Event_Id |  type  |   tag   | Event_Date
---------+--------+---------+-----------
1        | staff  |  tag1   | xx-xx-xxxx
2        | user   |  tag2   | yy-yy-yyyy

我需要对上述查询进行哪些更改才能获得此格式?

注意:我无法使用 Pivots,因为我正在使用的系统不支持它们。

非常感谢任何帮助

在没有数据透视表(交叉表)的情况下试试这个:

SELECT t.event_id as Event_Id,
          max(v.value) filter (where v.key='type') as "type",
          max(v.value) filter (where v.key='tag') as "tag",
          DATE (t.event_date) as Event_Date
   FROM eventtags t
   LEFT JOIN filtervalues as v ON t.value_id = v.id
   group by t.event_id,t.event_date

DEMO

以上仅适用于 PostgreSQL 9.4 及更高版本。