如何使用Group by和Joins获取我的解决方案

时间:2013-07-05 10:33:03

标签: postgresql-9.2

在POSTGRESql ::

我有 TableA 和列

id  |   descr     |  team      |  status
254 | NSWemp      | Sales      | A
365 | NSW,VIC emp | Sales      | L
345 | NSW emp     | Post Sales | A

我有一个 TableB 与列

id   | state
254  | NSW
365  | NSW
365  | VIC
365  | QLD
2345 | NT
2345 | NSW

我的要求 ::有没有办法让输出为::

id     |    descr    |  team       |   status  |    state
254    | NSWemp      | Sales       | A         | NSW
365    | NSW,VIC emp | Sales       | L         | NSW,VIC,QLD
2345   | NSW emp     | Post Sales  | A         | NT,NSW

我曾尝试过JOINS和GROUP BY,但我无法让它发挥作用!有什么建议吗?

SELECT TABLEA.ID,DESCR,TEAM,STATUS,STATE 
     FROM TABLEA 
     inner join TABLEB   ON TABLEA.ID = TABLEB.ID 
   GROUP BY  TABLEA.ID,DESCR,TEAM,STATUS,TABLEB.STATE;

      id  |    descr    |    team    | status | state
    ------+-------------+------------+--------+-------
     2345 | NSW emp     | Post Sales | A      | NT
      365 | NSW,VIC emp | Sales      | L      | NSW
      254 | NSWemp      | Sales      | A      | NSW
     2345 | NSW emp     | Post Sales | A      | NSW
      365 | NSW,VIC emp | Sales      | L      | QLD
      365 | NSW,VIC emp | Sales      | L      | VIC

(6 rows)

1 个答案:

答案 0 :(得分:0)

您应该使用ARRAY_AGG()

SELECT TABLEA.ID,
       DESCR,
       TEAM,
       STATUS,
       array_agg(STATE) 
       FROM TABLEA 
        inner join TABLEB
          ON TABLEA.ID = TABLEB.ID 
       GROUP BY TABLEA.ID,DESCR,TEAM,STATUS

SQL Fiddle demo